Looking for php Keywords? Try Ask4Keywords

PHP 通過參考傳遞


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

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

  • 新語句,例如foo(new SomeClass)
  • 從函數返回的引用

數組

“傳遞引用”的常見用法是修改數組中的初始值,而不是創建新數組或亂丟命名空間。傳遞引用就像使用& => &$myElement在變量前面/前綴一樣簡單。

下面是一個從數組中利用元素並簡單地將1添加到其初始值的示例。

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

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

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

print_r($arr);

注意

在循環中利用引用傳遞時應注意。在上面的循環結束時, $num仍然保存對數組的最後一個元素的引用。分配後循環將最終操縱最後一個數組元素!你可以通過unset()在循環後調用它來確保不會發生這種情況:

$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顯原始變量來驗證。

echo $var;

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

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