ホームページ >バックエンド開発 >PHPチュートリアル >[ThinkPHP] 奇妙な現象、$this->rowUser['ext'] = '' を代入できません!ただし、array_merge は実行します

[ThinkPHP] 奇妙な現象、$this->rowUser['ext'] = '' を代入できません!ただし、array_merge は実行します

WBOY
WBOYオリジナル
2016-06-13 11:59:481011ブラウズ

[ThinkPHP] 奇妙な現象、$this->rowUser['ext'] = ''; を割り当てることができません。しかし、array_merge は可能です。
thinkphp3.1.3 で非常に奇妙なことに遭遇しました。

<br /><?php<br /><br />/**<br /> * Class UserAction by <[email&#160;protected]><br /> */<br />class UserAction extends InitAction<br />{<br /><br />    public function index()<br />    {<br />        $where = array(<br />            'mid' => array('eq', $this->getUid())<br />        );<br />        $this->rowUser = M('Member')->where($where)->find();<br /><br />        //测试1<br />        $this->rowUser['ext'] = '名字4';<br />        dump($this->rowUser); //里面没有ext这个键!<br /><br />        //测试2 有<br />        $arr['ext'] = '名字4';<br />        $this->rowUser = array_merge($arr, $this->rowUser);<br />        dump($this->rowUser); //里面有ext这个了<br /><br />        //测试3 <br />        $this->rowUser2 = array(<br />            'a' => 'A',<br />            'b' => 'B',<br />        );<br />        $this->rowUser2['ext'] = '3333';<br />        dump($this->rowUser2); //里面也没有ext这个<br />        die;<br />    }<br />}<br />


何が起こっているのですか?とても奇妙なことです!


-----解決策---------
クラスにアクセスしますメソッドは $this->メソッド名と同じです。このメソッドはクラスまたは継承クラスに存在する必要があります。
------解決策-----------
UserAction またはその親クラスで定義すると__set メソッドと __get メソッドは常識に従って動作しない可能性があるため、この状況が発生するのは正常です

-----解決策----------- ---------私もこの問題に遭遇しました
TP はコントローラーで値を割り当てます。実際、__set メソッドはビュー クラス Viewその後、__set マジック メソッドにバグがあることがわかりました。このメソッドは、配列属性の要素に値を直接割り当てる操作をインターセプトできません。
$this->arr['a'] = 1;これが TP での動作方法です $this->arr に値を直接割り当て、実際には $this->view->tVar

から読み取ります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。