浅谈PHP中关于foreach使用引用变量的坑
php  /  管理员 发布于 7年前   149
写PHP好多年,但仍然会犯低级错误,今天遇到个 foreach中引用变量时的坑,PHP版本为 5.6.12 代码如下: 输出结果 一开始看到第二个 foreach 输出的结果感觉很是莫名其妙,怎么会输出两个 d_d 呢? 仔细想了想,原来因为PHP foreach 中的 $a 的作用域是整个函数的局部变量,在循环外部仍然有效,而不是被封闭在循环内的, 所以当执行第二个foreach 时的 $a 并不是新的变量,而是仍然指向 $arr 数组第5个元素的地址引用, 当第二个 foreach 在循环时实际上是在不停的给 $arr 数组的第5个元素赋值, 具体赋值情况, 第一次:a_a 赋值给第5个元素, 结果为: [a_a, b_b, c_c, d_d,a_a] 第二次:b_b 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,b_b] 第三次:c_c 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,c_c] 第四次:d_d 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,d_d] 第五次:此时因为第五个元素已经变成 d_d 又重新把 d_d 赋值给第5个元素,结果还是为: [a_a, b_b, c_c, d_d,d_d] 解决办法: 1.尽量不使用相同的循环变量名; 2.每次使用完或再次使用前进行 unset($a); 处理,解除地址应用 还是用上面代码示例: 输出结果: 现在就正常了,这些小细节一定要注意了 以上就是小编为大家带来的浅谈PHP中关于foreach使用引用变量的坑全部内容了,希望大家多多支持~&$a) { $a = $a.'_'. $a; echo $a .'
';}echo '
';foreach ($arr as $i=>$a) { echo $a .'
';}echo '
';print_r($arr);$arr = ['a', 'b', 'c', 'd', 'e'];foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'
';}echo '
';echo $a;echo '
';// 这里 unset 掉unset($a);echo $a = 'ccc';echo '
';print_r($arr);echo '
';foreach ($arr as $i=>$a) { echo $a .'
';}echo '
';print_r($arr);您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号