查看文章 |
PHP里使用引用变量时容易犯的错
2009-06-26 10:09
一个场景: foreach($arr as &$element) { //modify $element } 这种用法是最近常见的,但是这里隐藏一个严重的问题。由于$element变量的作用域是在整个函数(假如这个循环是在某个函数里),如果$element这个变量被foreach这个循环之后的代码再次使用并对其作修改操作时,问题就发生了。因为在循环里$element是个引用变量,如果再对$element赋值那么相当于修改了原有$element所指的内容,例如: foreach($arr as &$element) { //modify $element } foreach($arr2 as $element) { //other code } 这两个循环执行完后,数组$arr里的最后一个元素将会被修改,这是一种不太容易发现的问题。这里如果把第二个循环的变量修改下能解决问题?是,但是并不是可靠的。因为在第一次的循环后,最后一个$element就成为了引用变量。最好的办法是使用unset foreach($arr as &$element) { //modify $element unset($element); } |
最近读者: