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的朋友。。

  • 相关阅读:
    使用gulp搭建一个传统的多页面前端项目的开发环境
    抓包工具使用
    selectors 模块
    I/O模型
    协程
    进程池
    进程的同步
    进程间通讯的三种方式
    多进程调用
    生产者消费者模型
  • 原文地址:https://www.cnblogs.com/glory-jzx/p/3443511.html
Copyright © 2011-2022 走看看