通過參考傳遞
這允許你通過引用傳遞變數來允許你修改原始變數的函式或元素。
傳遞引用不僅限於變數,以下內容也可以通過引用傳遞:
- 新的陳述,例如
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 開始,刪除了呼叫時傳遞引用,因此使用它會引發致命錯誤。