有没有什么更“魔术”一点的方法。。???

诸位看到这个标题可能首先想到的是__get魔术方法,窝也想到了,但是——

因为我会需要用到json_encode($obj)来输出到JS访问,所以此处的some_attr只能为public。
那么在调用$obj->some_attr时就不能用__get来做了。

我实在不想弄个$obj->to_json()这种东西。


MMTTMM
浏览 69回答 2
2回答

冉冉说

<?phpclass&nbsp;test{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;$var_a;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;$var_b;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__get($name)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//do&nbsp;something&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ext: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pre&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;substr($name,0,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$var&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;substr($name,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($pre&nbsp;!==&nbsp;'_')&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!property_exists($this,$var))&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!method_exists($this,$name))&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->$name(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_var_a()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->var_a&nbsp;=&nbsp;'a';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this->var_a; &nbsp;&nbsp;&nbsp;&nbsp;} }$test&nbsp;&nbsp;&nbsp;=&nbsp;new&nbsp;test();$test->_var_a;$str&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;json_encode($test);var_dump($str);这是什么需求。还是我理解错了?直接外部操作不就行了,何必这么繁。

湖上湖

你的意思是要在类内部指定哪些成员要被序列化吧:1)让你的类去实现Serializable接口(5.1就支持了),自己写个serialize方法返回json_encode过的数据;2)或者去实现JsonSerializable接口(5.4+)。
打开App,查看更多内容
随时随地看视频慕课网APP