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

PHP 函式深度解析:定義、參數傳遞、返回值與進階特性

     編輯:PHP 相關知識

前言

函式是結構化程式設計的基石,PHP 提供了豐富的內建函式庫,並支援使用者自訂函式、匿名函式、箭頭函式等現代特性。本文從基礎語法切入,深入探討參數傳遞機制、返回值處理、變數函式、引用返回等進階主題,並整理常用核心函式庫分類索引。

一、函式定義與呼叫

基本語法

function functionName($param1, $param2 = 'default') {
    // 函式主體
    return $result;
}

// 呼叫
$result = functionName('arg1', 'arg2');

命名規則

  • 不區分大小寫(建議統一採用 camelCase 或 snake_case)
  • 不可與內建函式同名(除非刻意覆寫)
  • 避免使用 __ 開頭(保留給魔術方法)

二、參數傳遞機制

傳遞方式語法行為適用場景
**傳值** (預設)function foo($arg)複製值到區域變數,函式內修改不影響外部純資料處理、不可變資料
**傳址** (引用)function foo(&$arg)傳遞記憶體位址,函式內修改直接影響外部變數需修改外部變數、大型陣列/物件避免複製開銷
**預設參數**function foo($arg = 'default')呼叫時可省略,預設值必須是常數表達式選擇性參數、向後相容
**可變參數** (PHP 5.6+)function foo(...$args)接收任意數量參數為陣列不定參數函式、中介軟體
**解包參數** (PHP 5.6+)foo(...$arr)將陣列展開為參數列表動態呼叫、參數轉發

範例:傳址修改外部變數

function addPrefix(&$str, $prefix = 'PRE_') {
    $str = $prefix . $str;
}
$name = 'John';
addPrefix($name);
echo $name; // PRE_John

注意:預設參數必須放在非預設參數右側

// 錯誤
function foo($a = 1, $b) {}

// 正確
function foo($a, $b = 1) {}

三、返回值

基本返回

function sum($a, $b) {
    return $a + $b; // 返回單一值
}

返回多個值:使用陣列或 list() 解包

function stats($arr) {
    return ['sum' => array_sum($arr), 'count' => count($arr)];
}
['sum' => $s, 'count' => $c] = stats([1,2,3]); // PHP 7.1+ 解包語法

return 的流程控制效果

  • 在函式中:終止函式執行,返回值給呼叫者
  • 在全域腳本中:終止腳本執行(等同 exit)
  • 在 include 檔案中:返回值給 include 運算式,並停止該檔案執行

四、進階特性

1. 變數函式

透過變數名稱動態呼叫函式。

function sayHello() { echo "Hello\n"; }
function sayBye() { echo "Bye\n"; }

$func = 'sayHello';
$func(); // Hello

$func = 'sayBye';
$func(); // Bye

應用:回調函式、策略模式、路由分發。

2. 匿名函式 / Closure (PHP 5.3+)

$greet = function($name) { return "Hello, $name"; };
echo $greet('World'); // Hello, World

// 綁定外部變數
$prefix = 'Mr. ';
$greet = function($name) use ($prefix) { return $prefix . $name; };

3. 箭頭函式 (PHP 7.4+)

$mul = fn($x, $y) => $x * $y;
echo $mul(3, 4); // 12

// 隱含 use 綁定外部變數
$factor = 10;
$scale = fn($x) => $x * $factor;

4. 引用返回

function &getConfig() {
    static $config = ['debug' => true];
    return $config;
}
$cfg = &getConfig();
$cfg['debug'] = false; // 修改靜態變數

用途:單例模式、快取存取、大型資料結構避免複製。

5. 解除引用 unset()

僅斷開變數名稱與值的綁定,不銷毀值本身(引用計數機制)。

五、核心函式庫分類速查

分類常用函式說明
**變數處理**isset(), empty(), gettype(), var_dump(), is_array(), is_numeric()型別檢查、變數狀態判斷
**字串操作**strlen(), substr(), strpos(), str_replace(), explode(), implode(), trim(), sprintf()搜尋、替換、分割、格式化
**日期時間**date(), time(), strtotime(), mktime(), DateTime 類別格式化、運算、時區處理
**數學運算**rand(), mt_rand(), round(), floor(), ceil(), abs(), fmod()隨機數、取整、浮點數餘數
**檔案系統**fopen(), file_get_contents(), file_put_contents(), mkdir(), unlink(), glob()讀寫、目錄操作、路徑處理
**陣列操作**array_merge(), array_map(), array_filter(), array_reduce(), array_keys(), in_array()合併、轉換、過濾、聚合、查找
**資料庫 (MySQLi/PDO)**mysqli_connect(), PDO::__construct(), prepare(), execute(), fetchAll()預處理語句、交易控制、防注入

六、常見錯誤與最佳實踐

  • **函式名稱衝突**:使用命名空間 namespace App\Utils; 避免全域污染。
  • **參數型別宣告 (PHP 7.0+)**:function add(int $a, int $b): int 提升可讀性與 IDE 支援。
  • **嚴格模式**:declare(strict_types=1); 強制型別檢查。
  • **避免過度使用全域變數**:透過參數傳遞、依賴注入、服務容器管理狀態。
  • **單一職責**:一個函式只做一件事,超過 20 行考慮拆分。

結語

熟練掌握 PHP 函式的定義、參數機制、返回值處理與進階特性,能讓您寫出更模組化、可測試、可維護的程式碼。善用型別宣告、匿名函式與現代語法糖,是邁向專業 PHP 開發者的關鍵一步。

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