PHP函數參數傳遞有兩種方式:傳值(Copy Pass):預設機制,函數收到參數值的副本,修改不影響原變數。傳引用(Reference Pass):函數收到原變數的引用,修改直接影響原變數。
PHP 函數參數傳遞機制
在PHP 中,傳遞參數參數時,有兩種傳遞機制:
傳值(Copy Pass)
函數參數預設採用傳值機制,即在函數內部建立參數值的副本。對副本的任何修改都只影響函數作用域內的變量,而不會影響函數外部的原變量。
function add($a, $b) { $a = $a + $b; // 只修改函数内部的 $a 副本 } $x = 1; $y = 2; add($x, $y); // 传值到函数 echo $x; // 仍为 1,未受函数内更改的影响
傳引用(Reference Pass)
透過在參數前面加上 &
符號,可以實現傳引用機制。這樣函數內部運算的不再是值的副本,而是直接對原變數進行修改。
function add_ref(&$a, &$b) { $a = $a + $b; // 直接修改原变量 } $x = 1; $y = 2; add_ref($x, $y); // 传引用到函数 echo $x; // 现在为 3,因函数内修改了原变量
實戰案例:
一個常見的例子是表格資料的分頁功能。我們需要向分頁函數傳遞目前頁碼和每頁記錄數等參數。如果採用傳值機制,那麼分頁函數只能操作參數的副本,無法修改資料庫查詢語句中偏移量和限制條件等設定。因此,在這種情況下,應使用傳引用機制,以確保分頁函數能夠修改原始參數。
function paginate($page_num, $per_page) { global $offset, $limit; // 全局变量 $offset = ($page_num - 1) * $per_page; $limit = $per_page; } // ... 获取 $page_num 和 $per_page 的值 ... paginate($page_num, $per_page); // 传引用修改全局变量
以上是PHP 函數參數是如何傳遞的的詳細內容。更多資訊請關注PHP中文網其他相關文章!