php的循环与引用的一个坑,php循环引用_PHP教程
上代码
$arr = array(
'a'=> 'a11',
'b'=> 'b22',
'c'=> 'c33',
);
foreach ($arr as $k=>&$v){
// Do somethind
}
forea
php的循环与引用的一个坑php循环,php循环引用 上代码 $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 $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset(). 对于上面这个例子, 第一个循环结束后, $v引用仍然存在. 由于两个循环的变量命名一致, 第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了 前一个元素的值. 原理很简单, 文档写的明明白白. 但如果工作中遇到相关的bug是很坑的, 定位需要很久. 还得需要写码的时候就注意: 1. 减少引用的使用 2. 如果需要在foreah使用引用, 应该用函数将封装起来 trueTechArticlephp的循环与引用的一个坑,php循环引用 上代码 $arr = array ( 'a'= 'a11', 'b'= 'b22', 'c'= 'c33', ); foreach ( $arr as $k = $v ){ // Do somethind } foreach ( $arr as... (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |