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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM