微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP中foreach用&出现的问题

$arr = [1, 2, 3]; foreach ($arr as $key => &$v) {     $a = 1; } var_dump($arr); foreach ($arr as $key => $v) {     $a = 1; } var_dump($arr); 跟预期的结果不太一样,查了下资料,原因就在于foreach中的引用在foreach完成后并没有释放,也就是说在第一个foreach中的引用一直保留着,当第一个foreach完成后,$v是指向$arr[2]的一个引用,修改$v会修改$arr的值,再第二个foreach中,不断的将$arr中的值赋给$v,即第二个foreach执行中$arr的值在不断地变化,首先是$arr[0]赋给$v,$v修改$arr[2]的值,变为1,然后是$arr[1]赋给$v,$v修改$arr[2]的值,变为2。 总结下原因就是在第一次foreach之后因为用了&号,$v的指针指向了$arr[2],所以在以后的foreach循环时得到的$v就会赋值给$arr[2]   这样的问题比较难以找出原因,所以要求我们在写代码的时候养成良好的习惯,如果在foreach中适用引用&来改变数组或者对象的值,那么在foreach完成后一定得手动释放引用。  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐