通過參考傳遞

這允許你通過引用傳遞變數來允許你修改原始變數的函式或元素。

傳遞引用不僅限於變數,以下內容也可以通過引用傳遞:

  • 新的陳述,例如 foo(new SomeClass)
  • 從函式返回的引用

陣列

傳遞引用 的常見用法是修改陣列中的初始值,而不是建立新陣列或亂丟名稱空間。通過引用傳遞就像使用 & => &$myElement 在變數前面/字首一樣簡單。

下面是一個從陣列中利用元素並簡單地將 1 新增到其初始值的示例。

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

現在,當你利用 $arr 中的任何元素時,原始元素將隨著引用的增加而更新。你可以通過以下方式驗證:

print_r($arr);

注意

在迴圈中利用引用傳遞時應注意。在上面的迴圈結束時,$num 仍然保持對陣列的最後一個元素的引用。分配後迴圈將最終操作最後一個陣列元素! 你可以確保這不會發生在環路後的時候:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

以上將確保你不會遇到任何問題。 StackOverflow 上的這個問題中提供了與此相關的問題示例。

功能

傳遞引用的另一種常見用法是在函式內。修改原始變數非常簡單:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

這可以通過 echo‘ing 原始變數來驗證。

echo $var;

有關函式的各種限制,如下面的 PHP 文件中所述:

注意: 函式呼叫上沒有引用符號 - 僅在函式定義上。單獨的函式定義足以通過引用正確傳遞引數。從 PHP 5.3.0 開始,當你在 foo(&$ a);中使用&時,你將收到一條警告,指出“call-time pass-by-reference”已棄用。從 PHP 5.4.0 開始,刪除了呼叫時傳遞引用,因此使用它會引發致命錯誤。