首页 > 后端开发 > php教程 > php的循环与引用的一个坑

php的循环与引用的一个坑

WBOY
发布: 2016-06-23 13:17:16
原创
857 人浏览过

上代码

$arr = array(    'a'=> 'a11',    'b'=> 'b22',    'c'=> 'c33',);  foreach ($arr as $k=>&$v){    // Do somethind}foreach ($arr as $k=>$v){    var_dump($v);}
登录后复制

这样的代码, var_dump 会输出什么? 各位可以试试, 答案

string(3) "a11"string(3) "b22"string(3) "b22"
登录后复制

结果里, 第三行变成了 key='b' 的value.  问题就出在第一个循环的引用.

今天就踩到了一个这样的坑, 查问题用了很久.  简单来说,  foreach循环使用的引用,  循环结束后有所保留. php.net 着重写了:

Warning

Reference of a  $valueand the last array element remain even after the  foreachloop. It is recommended to destroy it by  unset() .

对于上面这个例子,  第一个循环结束后, $v引用仍然存在.  由于两个循环的变量命名一致,  第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了

前一个元素的值.

原理很简单,  文档写的明明白白.  但如果工作中遇到相关的bug是很坑的,  定位需要很久.  还得需要写码的时候就注意:

1. 减少引用的使用

2. 如果需要在foreah使用引用,  应该用函数将封装起来

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