首頁 > 後端開發 > php教程 > 為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?

為什麼 PHP 引用的 Foreach 迴圈會出現意外行為?

Barbara Streisand
發布: 2024-12-13 12:57:10
原創
1052 人瀏覽過

Why Does PHP's Referenced Foreach Loop Exhibit Unexpected Behavior?

理解 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板