首页 >后端开发 >php教程 >为什么带有引用传递的 PHP 的'foreach”会产生意外的结果?

为什么带有引用传递的 PHP 的'foreach”会产生意外的结果?

Linda Hamilton
Linda Hamilton原创
2024-12-12 12:58:18947浏览

Why Does PHP's `foreach` with Pass-by-Reference Produce Unexpected Results?

PHP 在 foreach 中按引用传递

在 PHP 中,按引用传递允许函数或方法修改原始变量而不是副本。在 foreach 循环中使用时,如果不完全理解,可能会导致意外行为。

输出说明:零一二二

在提供的代码中:

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {}

foreach ($a as $v) {
  echo $v.PHP_EOL;
}

第一个 foreach 循环使用引用传递 (&) 直接修改数组元素。这意味着当$v的值改变时,它直接影响$a数组中相应的元素。

在第一个循环中,每个元素的值被设置为null。这是因为,当在按引用传递循环中未赋值时,数组中相应的值将设置为 null。

在第二个循环中,输出显示每个元素的当前值,从来自修改后的无效数组。前三个元素保持初始化时分配的值。然而,第四个元素 ($a[3]) 在第一个循环中被设置为 null。

因此,第二个循环的后续迭代将打印原始值(零、一和二),后跟 $a[3] 的空值。在最后一次迭代中, $v 的值仍然指向 $a[3] 的 null 值,这导致 'two' 被重复作为输出,因为它是 null 化之前的最后一个赋值。

以上是为什么带有引用传递的 PHP 的'foreach”会产生意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn