考慮一個簡單的函式:
function pass(&$arr)
{
// do something
}
如果我這樣稱呼它……
$a = [1,2,3];
pass($a);
……這會奏效。但是,如果我這樣做的話,...
pass([1,2,3]);
...它將失敗并顯示錯誤Cannot pass parameter 1 by reference。
為什么我不能在陣列有效的函式作用域中獲得對臨時陣列的參考?
uj5u.com熱心網友回復:
好吧,你不能那樣做……根據 php 手冊:只應通過參考傳遞變數。
雖然你可以創建一個函式,在它的范圍內創建一個變數,然后回傳參考(但是當你直接傳遞陣列時,通過參考傳遞它又有什么意義?我沒有發現它的任何用途,或者我錯過了什么?)
function pass(&$arr)
{
// do something
}
function &scopeVar($arr){
return $arr;
}
pass(scopeVar([1, 2, 3]));
uj5u.com熱心網友回復:
@rhaven;
我不知道你在這里試圖做什么,但錯誤資訊不僅是正確的,而且是有意義的。該陣列是即時創建的,雖然它實際上存在于記憶體中,但除了傳遞給函式的臨時參考之外,沒有對其的參考。
試圖參考像這樣的臨時值是矛盾的。它只是零意義。
@anees 提供了一個有趣的解決方法,但最重要的是我相信您需要重新考慮代碼,以及為什么您需要:
- 呼叫中的臨時變數,或
- 函式中的參考。
uj5u.com熱心網友回復:
函式呼叫中的 [1,2,3] 不是變數,它只是一個硬編碼值。您可以將其傳遞給按值傳遞但不能按參考傳遞的函式。如果函式是通過參考傳遞的,則它需要一個變數。更重要的是,在 PHP 7 中,如果您嘗試在方法呼叫中宣告變數,他們在嚴格的標準中添加了一條通知,即pass(($a = [1,2,3]));:https : //www.php.net/manual/en/migration70.incompatible.php
此頁面沒有給出決定的理由。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340793.html
上一篇:從MySQL結果創建PHP陣列
