理解 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 中最后一个元素的引用,因此修改了相应的数组元素。
解决方案
要防止这种行为,请始终取消设置引用变量在 foreach 循环之后完成:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
输出:
Array ( [0] => a [1] => b [2] => c [3] => d )
以上是为什么 PHP 引用的 Foreach 循环会出现意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!