gpt4 book ai didi

PHP中使用foreach和引用导致程序BUG的问题介绍

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP中使用foreach和引用导致程序BUG的问题介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

代码如下

$a = array(1, 2);  $b = array(11, 12);  foreach($a as &$r){  }  foreach($b as $r){  }  echo $a[1]; // 输出 12  。

两个的循环的本意可能是: 第一个循环需要在循环中修改元素的内容, 所以使用引用; 但第二个循环只是把 $r 当作一个临时变量. 可是, 为什么 $a[1] 的值发生了改变呢?  当对 $a 的迭代完成后, $r 是 $a[1] 的引用, 改变 $r 的值, 就是改变 $a[1]. 这时, 你可以会奇怪, 代码中并没有修改 $r, 也没有修改 $a[1] 呀?  其实, foreach 是操作的是数组的拷贝, 所以, 后一个迭代相当于:  。

复制代码代码如下

for($i=0; $i<count($b); $i++){  $r = $b[$i]; // 修改了 $r! 相当于 $a[1] = $b[$i];  }  。

为了避免这种情况, 应该在第一个迭代之后, 执行  。

复制代码代码如下

unset($r);  。

从当前环境中删除 $r 这个变量(引用变量).  即使不是前面的例子, 在第一个迭代之后, 仍然十分可能再执行类似的语句:  。

复制代码代码如下

$r = 123;  。

循环变量一般是临时变量, 同一个变量名在代码不同的地方表示不同的东西, 但变量的作用域又存在于循环之外. 这就是这种作用域规则的坏处, 加上”变量不声明即使用”的坏外, 再加上变量无类型的坏处.  。

最后此篇关于PHP中使用foreach和引用导致程序BUG的问题介绍的文章就讲到这里了,如果你想了解更多关于PHP中使用foreach和引用导致程序BUG的问题介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com