文章标签 ‘debug’

转自 http://hi.baidu.com/thinkinginlamp/blog/item/2fd89e51bc60e62043a75b4d.html 这个陷阱在PHP里存在很久了,先看代码: $array = array(1, 2, 3); foreach ($array as &$v) {} foreach ($array as $v) {} print_r($array); 运行代码,得到的结果却是: Array ( [0] => 1 [1] => 2 [2] => 2 ) 可以发现,经过两次foreach后,最后一个元素由3变成了2。 为什么会这样呢?这是因为第一次foreach的时候$v成为了一个引用变量($array[2]),如此,当第二次foreach的时候,实际上只是在对这个引用变量($array[2])进行了若干次赋值而已。 第一次:$array[2] = 1,此时$array各元素分别为1,2,1 第二次:$array[2] = 2,此时$array各元素分别为1,2,2 第二次:$array[2] = 2,此时$array各元素分别为1,2,2 一不小心很可能会掉入这个陷阱,为了避免这个问题,需要在第一次foreach后执行unset($v),解决方案有点丑陋,但也没有办法,PHP脚本里的变量一旦生成就在整个脚本中有效,不像Java中,变量是块级别的,仅仅在对应的{}中有效。 今天偶然发现这个,算是我小白吧。。。不过bug合情合理,常常foreach的变量的冲突导致程序bug,谨记!

2009年3月8日22:24 | 没有评论
分类: 他山之石
标签: ,