今兒開發過程中發現 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的朋友。。
