zoukankan      html  css  js  c++  java
  • thinkphp 控制器unset删除对象变量失败。。

      今儿开发过程中发现 tp是unset 变量失败。。具体代码

    foreach( $this->menu as $k => $v){
        if(0 == $v['flag'])
             unset($this->menu[$k]);
    }

    逻辑很简单。。但是居然没过滤掉menu里面的值。。

    一番折腾后发现居然是 TP 底层重写了 __set __get 造成的 具体代码

        public function __construct()
        {
            //实例化视图类
            $this->view       = Think::instance('View');
            //控制器初始化
            if(method_exists($this,'_initialize'))
                $this->_initialize();
        }
        public function __set($name,$value) {
            $this->view->assign($name,$value);
        }
        public function __get($name) {
            return $this->view->get($name);
        }

     具体就类似这种

    class af{
       public $v =array();
       function __construct(){
           
       }
       function __set($k , $v){
          echo "set".$k;
          $this->v[$k] = $v;
       }
       function __get($k){
          echo "get".$k;
          return $this->v[$k];
       }
    
    }
    class a extends af{
        function __construct(){
           parent::__construct();
        }
        function t(){
             $this->aaa = array(1=>array(),3=>array(1,2), 2=>array(4,5,7));
             foreach($this->a as $k=>$v){
                    if($k ==1){
                       unset($this->a[$k]);
                    }
             }
             print_r($this->a);
        }
    }
    $aaa = new a();
    $aaa->t();

    希望能帮到以后碰到这个BUG的朋友。。

  • 相关阅读:
    LeetCode70.爬楼梯
    LeetCode9.回文数
    LeetCode8.字符串转整数(atoi)
    LeetCode7.反转整数
    Docker深入浅出3-镜像管理
    Docker深入浅出3-容器管理
    Docker深入浅出2
    Docker深入浅出1
    Docker启动mysql的坑2
    各种常见兼容代码
  • 原文地址:https://www.cnblogs.com/glory-jzx/p/3443511.html
Copyright © 2011-2022 走看看