转-PHP —— 为什么不要在 FOREACH 中使用变量引用
2014-03-27 10:28
447 查看
4000
最近在浏览同事之前写的代码的时候,发现大量的变量引用使用在 foreach 中:
这种写法有个好处,就是可以直接通过改变引用变量 $v 的值,来直接改变数组的值。但是显然,这里会带来一个问题:
通常 foreach 变量都只希望是一个作用域在 foreach 内部的局部临时变量。但是当不慎在后面用了同名的临时变量时,数组的内容会不预期的被改变。就如同上面的代码那样,最终结果 $a[3] = ‘foobar’ 而不是预期的 $a[3] = ‘d_bar’。这对于程序的正确执行时一个隐患,不能让程序的正确性维系在程序员足够细心的不使用重名临时变量,这一线上。
解决方法有两种。
第一种,直接使用数组的键值来修改数组内容:
第二种,注销掉 foreach 中使用的临时变量:
最近在浏览同事之前写的代码的时候,发现大量的变量引用使用在 foreach 中:
$a = array ( ‘a‘, ‘b‘, ‘c‘, ‘d‘); |
foreach ( $a as & $v ) { |
$v = $v . ‘_bar‘; |
} |
var_dump( $a ); |
$a = array ( 'a' , 'b' , 'c' , 'd' ); |
foreach ( $a as & $v ) { |
$v = $v . '_bar' ; |
} |
$v = 'foobar' ; |
var_dump( $a ); |
解决方法有两种。
第一种,直接使用数组的键值来修改数组内容:
$a = array ( 'a' , 'b' , 'c' , 'd' ); |
foreach ( $a as $k => $v ) { |
$a [ $k ] = $v . '_bar' ; |
} |
$v = 'foobar' ; |
var_dump( $a ); |
$a = array ( 'a' , 'b' , 'c' , 'd' ); |
foreach ( $a as & $v ) { |
$v = $v . '_bar' ; |
} |
unset( $v ); |
$v = 'foobar' ; |
var_dump( $a ); |
相关文章推荐
- PHP关于foreach使用引用变量的坑
- PHP的foreach语句使用引用变量的问题
- 浅谈PHP中关于foreach使用引用变量的坑
- 浅谈PHP中关于foreach使用引用变量的坑
- PHP的foreach中使用引用时需要注意的一个问题和解决方法
- php中foreach使用&引用后的异常分析及处理办法
- PHP中使用foreach引用需要注意的问题
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 【PHP】 foreach循环中变量引用的一道面试题
- 【php】foreach中使用引用引起的问题
- PHP中使用foreach和引用导致程序BUG的问题介绍
- PHP中foreach循环中使用引用要注意的地方
- PHP中foreach循环中使用引用要注意的地方
- php中变量引用&不可与global共同使用
- PHP中使用foreach和引用导致程序BUG的问题介绍
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- php在foreach中使用引用赋值&可能遇到的问题
- PHP中使用foreach和引用导致程序BUG及解决办法
- PHP的foreach中使用引用时需要注意的一个问题和解决方法