百度空间 | 百度首页 
 
查看文章
 
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);
    }
   
   

类别:Php | 添加到搜藏 | 浏览() | 评论 (3)
 
最近读者:
 
网友评论:
1
2009-06-26 11:05 | 回复

Discuz全局变量及说明
http://bbs.php.cn/thread-33465-1-1.html
《JavaScript实例自学手册: 光盘/教程》随书光盘/电子教程
http://bbs.php.cn/thread-33534-1-1.html
《PHP英文资料》(PHP 6 MySQL CakePHP Web Application Development)PDF
http://bbs.php.cn/thread-33531-1-1.html
完全手册:JavaScript动态网页开发详解 教程/光盘
http://bbs.php.cn/thread-33536-1-1.html
 
2
2009-06-26 16:11 | 回复
建议不要使用这种方式, 如果需要对foreach的变量进行修改, 请使用foreach($arr as $key => $value) {
     $arr[$key] = '';;
}
 
3
2009-06-30 13:41 | 回复
回复laruence:大家都这样用.bs楼主.
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu