作者SmallBeeWayn (喵喵叫的蜜蜂猫)
看板PHP
标题[请益] foreach( as &$v)
时间Mon Apr 4 18:40:33 2011
一个简单的程式码如下:
$arr = array(1,2,3,4);
foreach($arr as &$value) ;
var_dump($arr);
得到的结果:
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> &int(4) }
根据官方的说明:
http://php.net/manual/en/control-structures.foreach.php
Reference of a $value and the last array element remain even after the
foreach loop. It is recommended to destroy it by unset().
之前我一直都没注意到这个现象
直到最近出现一个奇怪的错误弄半天弄不出来
发现是最後一项的指标在经过一段时间之後被指向另外一个资料...
官方文件有些讨论重现了这个问题:
Mark Rose 15-Dec-2010 10:55
himitsu at fnse dot de 08-Aug-2010 12:59
是不是根本就不要使用foreach($a as &$v) $v= 来改变$a?
宁愿使用foreach($a as $k=>$v) $a[$k]=
或者说有确保安全跟效能的解决方法?
我程式码好多地方都用了&$.....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.180.163
1F:→ arrack:我是都用後者,没出现过问题 04/04 19:09
2F:推 UniFish:...你了解加了个﹠的用意吗? 04/04 20:31
3F:推 linhomeyeu:官方上面就有给warning了... 04/04 21:14
4F:推 buganini:unset 04/04 22:34