理解 PHP 引用的 Foreach 迴圈的奇怪行為
在 PHP 中,foreach 迴圈迭代數組或物件中的元素。但是,當在循環中使用引用時(例如 foreach ($a as &$v) { ... }),可能會發生意外行為。
問題
考慮以下PHP 腳本:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
預期輸出:
預期輸出:包含元素'a'、'b'、'c' 和'd' 的陣列。
Array ( [0] => a [1] => b [2] => c [3] => c )
實際輸出:
解釋出現意外行為是因為foreach 循環中創建的引用在循環終止後仍然存在。具體來說,$a 數組中的最後一個元素仍然可以被變數 $v 引用。 當第二個 foreach 迴圈運行時,$v(對 $a 中最後一個元素的引用)被重新賦值數組中每個元素的。由於 $v 是對 $a 中最後一個元素的引用,因此修改了對應的陣列元素。
解$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
要防止這種行為,請務必取消設定引用變數在foreach 循環之後完成:
Array ( [0] => a [1] => b [2] => c [3] => d )輸出:
以上是為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!