thinkphp __set __get方法使未知数组成员属性赋值失败
<?php class pa{ var $var = array(); public function __get($name){ echo "__get ".$name."<br>"; return $this->var[$name]; } public function __set($name,$val){ echo "__set ".$name." {$val}<br>"; $this->var[$name] = $val; } } class a extends pa{ function a(){ $this->aa = array('aaa'=>array('onchannel'=>array('request'=>'dsfds'))); } function set(){ //$this->aa['aaa'][] = 'sdf'; //foreach ($this->aa as $key => $value) { //} $this->aa['aaa']['onchannel']['aa'] = 'sdfsdfasdas'; var_dump($this->aa); } } $aa = new a(); $aa->set();
上面代码在运行”$this->aa[‘aaa’][‘onchannel’][‘aa’] = ‘sdfsdfasdas’;”这行代码时会出现如下php警告:
Notice: Indirect modification of overloaded property a::$aa has no effect
意思就是此次赋值无效。thinkphp里也定义了这两个魔术方法,如果你想做这种类似的操作,要先定义好成员属性,避免触发到__get,__set方法,因为__get返回的是一个临时变量;或在__get前加&,如下:
public function &__get($name){ echo "__get ".$name."<br>"; return $this->var[$name]; }