我有兩個功能PHP忽略通過引用傳遞,如果VAR在函數調用分配
function c(&$x)
{
$x = 25;
echo 'c is called, x = ' . $x . PHP_EOL;
}
function b()
{
echo 'b is called'. PHP_EOL;
return 5;
}
然後我寫了下面的代碼,因爲我想到應該把)B的結果(以$ O,再通過$ o通過引用c()將其設置爲新值。它的工作原理確定:
$o=b();
c($o);
echo 'o is '.$o;
的輸出爲預期:
b is called c is called, x = 25 o is 25
但是,如果我嘗試在函數調用這樣分配的$ O值:
c($o = b());
echo 'o is '.$o;
我變得怪異輸出
b is called c is called, x = 25 o is 5
函數的順序ca lls仍然是一樣的,但是爲什麼$ o沒有改變,儘管它是通過引用傳遞的?如果在函數調用中賦值,PHP是否強制性地通過值傳遞參數?如果是的話,那麼這個版本是以這種方式工作的?根據這個評論:2006年的http://www.php.net/manual/en/functions.arguments.php#71198它的工作方式不同。我的版本是5.3.6
試試這個$ o = c(b()); – 2012-03-07 12:42:45
隨着最大error_reporting,我有'嚴格的標準:只有變量應通過引用傳遞與您的第二個版本。 – 2012-03-07 12:46:43
謝謝。忘了嚴格。但無論如何,這樣的代碼已經在以前的PHP版本中工作。也許我必須檢查最新PHP版本的更新日誌。 – Miroshko 2012-03-07 12:59:21