首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 入門教學:自訂函式完整語法、變數作用域與進階特性

     編輯:PHP 綜合知識

PHP 函式是程式碼重用、模組化、封裝邏輯的核心單位。掌握參數傳遞、作用域、預設值、參考傳遞等進階特性,能寫出彈性高、可維護的函式庫。

函式定義基本語法

<?php
function 函式名稱(參數1, 參數2 = 預設值, ...參數陣列) : 回傳型別宣告 {
    // 函式主體
    return 回傳值;
}
?>

九大核心特性詳解

1. 參數個數不限,型別任意

function sum(...$numbers) {  // 可變參數 (PHP 5.6+)
    return array_sum($numbers);
}
echo sum(1, 2, 3, 4);  // 10

2. 函式命名規則

  • 以字母或底線開頭,後接字母、數字、底線。
  • 不區分大小寫:myFunc()、MYFUNC()、MyFunc() 皆指向同一函式。
  • 建議採用 snake_case (PHP 標準) 或 camelCase。

3. 變數作用域:函式內預設為區域變數

$x = 10;
function test() {
    $x = 20;      // 區域變數,不影響外部
    echo $x;      // 20
}
test();
echo $x;          // 10 (外部未變)

4. global 關鍵字:在函式內存取全域變數

$a = 12;
function abc() {
    global $a;        // 宣告使用全域 $a
    $a += 45;
}
abc();
echo $a;  // 57 (全域變數被修改)

替代方案:$GLOBALS['a'] 陣列存取,不需 global 宣告。

5. unset 釋放區域變數參考

$a = 12;
function abc($a) {
    unset($a);        // 釋放區域參數 $a 參考
    $a = 45;          // 新區域變數
}
abc($a);
echo $a;  // 12 (全域未受影響)

6. 參數預設值 (PHP 5.0+)

function abc($b, $a = 2) {   // 預設值參數必須在非預設參數之後
    return $a + $b;
}
echo abc(70);      // 72 (使用預設 $a=2)
echo abc(70, 90);  // 160 (覆蓋預設值)

7. 傳值 vs 傳參考

傳遞方式語法行為適用場景
傳值 (預設)function foo($x)複製值,函式內修改不影響外部純量、陣列 (複製整個陣列)、物件 (複製參考)
傳參考function foo(&$x)傳遞變數記憶體位址,函式內修改直接影響外部需修改原變數、大型陣列避免複製、效能敏感
$a = 213;
function abc(&$b) {
    $b = 314;
}
abc($a);
echo $a;  // 314 (被修改)

8. 回傳型別宣告 (PHP 7.0+)

function add(int $a, int $b) : int {
    return $a + $b;
}
function getUser(int $id) : ?User {  // 可為 null
    return User::find($id);
}

9. 嚴格模式

declare(strict_types=1);  // 檔案頂端,強制型別檢查
function add(int $a, int $b) : int {
    return $a + $b;
}
add(1.5, 2);  // TypeError: Argument must be int, float given

變數作用域圖解

全域空間 ($GLOBALS)
  ├─ $a = 10
  ├─ $b = 'test'
  └─ function test() {
        區域空間
        ├─ $a = 20 (遮蔽全域)
        ├─ global $b (連結全域 $b)
        └─ $c = 30 (僅區域可見)
     }

最佳實踐清單

  1. 單一職責:函式只做一件事,名稱動詞開頭 (calculateTotal, validateEmail)。
  2. 參數預設值:減少多載需求,文檔化預期行為。
  3. 避免副作用:純函式 (無副作用、相同輸入必得相同輸出) 易測試、易平行化。
  4. 傳參考謹慎使用:文檔標註 @param Type $var [in/out],呼叫端明知會被修改。
  5. 型別宣告 + 嚴格模式:PHP 7+ 專案全域啟用 declare(strict_types=1),捕獲 90% 型別 Bug。
  6. 單元測試:每個公共函式至少覆蓋正常、邊界、異常三類案例。

精通 PHP 函式進階特性,是從「寫得動」進化到「寫得好、好維護、好擴充」的關鍵里程碑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved