当前位置:Gxlcms >
PHP教程 >
【ThinkPHP】诡谲的现象,$this->rowUser['ext']=''无法赋值!但是array_merge却可以
【ThinkPHP】诡谲的现象,$this->rowUser['ext']=''无法赋值!但是array_merge却可以
时间:2021-07-01 10:21:17
帮助过:3人阅读
【ThinkPHP】诡异的现象,$this->rowUser['ext'] = '';无法赋值!但是array_merge 却可以!
遇到一个非常匪夷所思的事情,在thinkphp3.1.3里面。
/**
* Class UserAction by <[email protected]>
*/
class UserAction extends InitAction
{
public function index()
{
$where = array(
'mid' => array('eq', $this->getUid())
);
$this->rowUser = M('Member')->where($where)->find();
//测试1
$this->rowUser['ext'] = '名字4';
dump($this->rowUser); //里面没有ext这个键!
//测试2 有
$arr['ext'] = '名字4';
$this->rowUser = array_merge($arr, $this->rowUser);
dump($this->rowUser); //里面有ext这个了
//测试3
$this->rowUser2 = array(
'a' => 'A',
'b' => 'B',
);
$this->rowUser2['ext'] = '3333';
dump($this->rowUser2); //里面也没有ext这个
die;
}
}
这个是怎么回事,很奇怪!
------解决方案--------------------和访问该类的方法一样$this->方法名 时该类或者继承的类中必须有该方法。
------解决方案--------------------如果你的 UserAction 或其父类中定义有 __set、__get 方法,出现这种情况是很正常的
因为他们可能不按常理出牌
------解决方案--------------------同样碰到过这个问题
TP在控制器中赋值,其实走的__set方法,被赋值到视图类View的tVar变量中了
然后我发现__set魔术方法有个BUG,拦截不到直接对数组属性的某个元素赋值的操作:
$this->arr['a'] = 1; 这样在TP中是直接对$this->arr赋值,而我们读取其实都是从$this->view->tVar