PHP 在 Foreach 中按引用傳遞
在 PHP 中,變數可以是普通變量,也可以是引用變數。當將一個變數的引用分配給另一個變數時,後者成為引用變量,本質上綁定到與原始變數相同的記憶體位置。當使用帶有引用傳遞語法 (&) 的 foreach 迴圈時,此行為會產生影響。
考慮以下程式碼:
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
此程式碼的輸出為:
zero one two two
為什麼會發生這種情況?
在第一個 foreach 迴圈中,$a 的每個元素都被指派為變數 $v 的參考。這意味著對 $v 的任何修改也會修改 $a 中的相應元素。
具體來說,在第一個循環的最後一次迭代期間,$v 被分配 $a[3] 的值(即,'三')。但是,此賦值建立了引用關係,因此 $a[3] 成為引用變數(即使沒有使用 & 明確賦值)。
在第二個 foreach 迴圈中,$a[3] 中元素的值a 被列印。然而,由於 $a[3] 現在是一個引用變量,它的值隨著 $v 的值而變化。當 $v 在第三次迭代中被賦值為「two」時,$a[3] 也變成「two」。
因此,在最後一次迭代中,$v(仍然指向 $a) [3]) 的值為“two”,並且印出“two”。這解釋了為什麼在最後一次迭代中重複“二”,而不是像人們直觀期望的那樣打印“三”。
以上是為什麼帶有引用傳遞 (&) 的 PHP foreach 會意外更改陣列元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!