2011-05-20 27 views
2

此代碼PHP數組複製語義:當成員是引用時它做了什麼,它在哪裏記錄?

<?php 

$a = 10; 
$arr1 = array(&$a); 

$arr1[0] = 20; 
echo $a; echo "\n"; 

$arr2 = $arr1; 
$arr2[0] = 30; 

echo $a; 

產生

20 
30 

顯然參考陣列成員 「保留」,這可導致,例如,到一些有趣的/奇怪的行爲,如

<?php 

function f($arr) { 
    $arr[0] = 20; 
} 

$val = 10; 
$a = array(&$val); 

f($a); 

echo $a[0]; 

?> 

輸出

20 

我的問題是:它是什麼,它在哪裏記錄(除了用戶評論在http://www.php.net/manual/en/language.types.array.php#50036)和Zend引擎的源代碼本身?

回答

3

通過引用行爲的PHP分配記錄在manual page "PHP: What References Do"上。你會發現數組值引用一個段落,也有開始:由前綴&到

雖然不是嚴格參照的分配,與語言結構陣列()創建的表達式也可以表現爲這樣要添加的數組元素。

該頁面還說明你爲什麼你的第一個代碼的行爲像它:

但是請注意,這裏面數組引用是潛在的危險。做一個正常的(不是通過引用)賦值和右側的引用不會將左側變爲引用,但是這些正常賦值中保留了數組內的引用。這也適用於數組按值傳遞的函數調用。

+0

這就是它現在,謝謝:) – mlvljr 2011-05-20 13:29:48

+0

這應該只是'陣列'的頁面:)。 – mlvljr 2011-05-20 13:32:03

+1

@mlvljr:如果你這麼想,你可以提交一個文檔錯誤:http://bugs.php.net/report.php – NikiC 2011-05-20 13:34:40

相關問題