首页 > 后端开发 > php教程 > 为什么 PHP 引用的 Foreach 循环会出现意外行为?

为什么 PHP 引用的 Foreach 循环会出现意外行为?

Barbara Streisand
发布: 2024-12-13 12:57:10
原创
1022 人浏览过

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 中最后一个元素的引用,因此修改了相应的数组元素。

解决方案

要防止这种行为,请始终取消设置引用变量在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板