今儿开发过程中发现 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的朋友。。