考慮以下PHP代碼段。
$array1 = array(1,20);
$x = &$array1[1];
$array2 = $array1;
$array2[1] = 22;
print_r($array1[1]); // Output is 22
這裏,$array2
不引用到$array1
,但如何在$array2
通過改變$array1
值更改值?
考慮以下PHP代碼段。
$array1 = array(1,20);
$x = &$array1[1];
$array2 = $array1;
$array2[1] = 22;
print_r($array1[1]); // Output is 22
這裏,$array2
不引用到$array1
,但如何在$array2
通過改變$array1
值更改值?
如果你想$array2
成爲$array1
的參考,那麼你做的事情與$x
一樣。
$array2 = &$array1;
現在,任何你在任何$array1
或$array2
改變是在兩個數組可見,因爲$array2
僅僅是$array1
參考。
更新
關於它的思考,你可能看到的是更改值的方式,但仍然有陣列的完整副本。這可以通過一個對象來實現。
$obj = new stdClass();
$array1 = array(1, 20);
$array1[1] = $obj;
$array1[1]->color = 22;
$array2 = $array1;
$array2[1]->color = 33;
echo $array1[1]->color; // prints 33
這是因爲對象總是通過引用複製,而數字和字符串按原樣複製。
嘿,你可能對這篇文章感興趣,我只是基於這篇文章而詳細介紹了你爲什麼看到這種行爲。 http://stackoverflow.com/questions/26081106/assign-by-reference-bug – mschuett 2014-09-28 04:39:31