iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0

什麼是函數?
函數就是一個功能~
在寫程式時,相同或類似邏輯的程式碼如果很常使用,那麼一直重複寫一樣的程式碼,一直複製貼上很沒有效率,函數就是將這些常用邏輯的程式碼獨立成一個個的個體,方便重複使用,達到減少程式碼檔案大小、增加可讀性、加快開發速度的功用。

is_float()、isset()、unset()、count()、mt_rand() 等都是函數,PHP內建的函數超過上千個,當然不太可能所有都用得到,有些也功能相近或是可以替代,寫法不同而已,通常
我們要用的時候再去找,只要記得幾個常用的就好,或是沒有你想要功能的函數,那麼就自己寫一個來自訂函數,但大部份的時候,能夠調用現成的函數幫我們實現功能上的需求。

函數的命名規則

在PHP中,函數名稱的命名有規範,不過跟之前介紹過的跟常數、變數的命名規則一樣,基本命名規則已經有介紹過,這邊再來幫大家複習一次~~~

  • 函數名稱不可以使用PHP內所定義的「關鍵字(keyword)」來命名(不可以和已經存在的函數EX:系統函數和自定義函數重名)
  • 名稱的開頭必須為英文字母(A-Z & a-z)、底線(_)
  • 後面可以接長度不限的英文字母、數字或是底線
  • 名稱區分大小寫 Ex. Winnie、WINNie、wINnIE 等是不同的名稱
  • 函數聲明要有意義

PS.在同樣的變數作用域(Scope)中,函數名稱、變數名稱、常數名稱不可以完全相同,必須是唯一的(不能出現同樣名稱的函數變數常數)

參數

所以我們把函數加上參數,讓程式碼能給函數添加更多的功能,參數類似變量。

return語句的作用:回傳值

具有return語句的函數就是有返回值的函數
沒有return的語句就是執行過程函數

今天程式計算完之後,要存進資料庫裡面,所以需要在函數的最後一行加上回傳值(return) 讓函數將計算完成後回傳.給其他程式碼去寫入資料庫,讓函數返回一個值。

  1. 如果函數中存在return並且執行了該return語句,那麼該函數的執行結果就可以被變量接收。
  2. 如果函數的執行過程中執行了return語句,那麼後續代碼都不再執行。
  3. 注意:一個函數中可以有多個return語句,但是程序只能執行一個,一般多個return語句都是使用分支結構(if)分開存放。
  4. echo 和 return 區別:要分清楚函數中想要變數接收運算結果一定要return,echo沒用唷~

建立函數

基本格式:

    function 函數名(參數){
        PHP語句 (函數體)
    }
  1. function 不能省略
  2. 函數的特徵:
    • 函數定義之後,不調用不執行。
    • 函數調用不分先後,因為PHP解析器在執行這個頁面代碼之前就已經預先加載了函數的內容。
  3. 參數:在設計函數時,為了避免呼叫函數時沒有傳入參數值,因此我們可以替函數的參數加上預設值。

型別

強型別語言中,型別約束是語法上的要求(定義一個變數的時候,必須指定其型別,並且以後該變數也只能儲存該型別資料)。

  • 參數資料型別
    限制能傳遞進來的資料型別
  • 回傳值資料型別
    限制回傳值的資料型別
    PS.要PHP7以上的版本才能使用

這是比較複雜的格式:

    function 函數名稱(型別1 參數1 = 預設值1,型別2 參數2 = 預設值2,....):回傳值型別{
        //函數也可以沒有回傳值型別,就把「:回傳值型別」的部分去掉即可
        函數內容;
        return 回傳值;//函數也可以不回傳任何值,沒有回傳值那就沒有這行
    }

函數的變量作用域

  • 局部變量
    • 在函數中定義的變量就是局部變量,作用範圍僅限函數內
    • 參數也是函數內部的變量,也就是局部變量
  • 全局變量
    1. 普通變量
      • 在函數外部聲明的變量,其作用範圍就是當前php頁面部分,函數內部無法使用
    2. 全局變量
      • 在函數的內部和外部都可以訪問和使用的變量就是全局變量
      • 實現全局變量方法1:
        • 在函數外部具有一個變量且函數內部也具有一個同名變量
        • 在函數內部的同名變量前使用global關鍵字修飾,既可以實現全局變量
        • 注意:global聲明全局變量時禁止賦值!!!!
      • 實現全局變量方法2:
        $GLOBALS
        • 在函數內部可以使用$GLOBALS[變量名]的方式直接調用函數外部的變量值,此時函數內外都可以使用,實現了另一種方式的全局變量。
          函數小例子:
<?php
//全局變量
//在函數的外部定義一個變量
$str = 'HI~~ 你好臉熟,我們認識嗎?';

//定義一個函數
function sayHi()
{
    //在函數內部使用global關鍵字聲明一個與外部同名的變量 
    global $str;
    echo $str;
    //嘗試改變$str的值
    $str = ' 神經病嗎你???? ';
}
echo '這是第一個在函數外部輸出:' . $str;
echo '<hr/>';
echo '這是在函數內部輸出' . sayHi();
echo '<hr/>';
echo '這是第二個在函數外部輸出:' . $str;
echo '<hr/>';
$str = '我是你的夢魘';
sayHi();

echo '<hr/>';

function str()
{
    //局部變量
    $name = 'Winnie';
    global $name;
    echo $name;
}
$name = 'Bear';
str();
echo '<hr/>';
var_dump($name);

靜態變量

在函數內部使用static聲明的變量就是靜態變量

  • 靜態變量的特徵
  1. 靜態變量只會被初始化一次
  2. 靜態變量在函數運行結束後不會被回收
  3. 靜態變量一般用於計算函數調用次數。
<?php
//靜態變量   統計函數調用的次數
function addNum()
{
    //靜態變量  只會被初始化一次
    static $a = 1;
    echo $a . '<br/>';
    $a++;
}
addNum(); //1
addNum(); //2
addNum(); //3

上一篇
Day14 流程控制之迴圈
下一篇
Day16 PHP的常用函數-1:數學、字符串函數
系列文
PHP 語法通關30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言