为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
MMTTMM 2023-04-18 18:14:32
诸位看到这个标题可能首先想到的是__get魔术方法,窝也想到了,但是——因为我会需要用到json_encode($obj)来输出到JS访问,所以此处的some_attr只能为public。那么在调用$obj->some_attr时就不能用__get来做了。我实在不想弄个$obj->to_json()这种东西。
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

<?phpclass test{    public $var_a;    public $var_b;    public function __get($name)    {        //do something ...
        //ext:
        $pre    = substr($name,0,1);        $var    = substr($name,1);        if($pre !== '_') return;        if(!property_exists($this,$var)) return;        if(!method_exists($this,$name)) return;        $this->$name();
    }    protected function _var_a()    {        $this->var_a = 'a';        return $this->var_a;
    }

}$test   = new test();$test->_var_a;$str    = json_encode($test);var_dump($str);

这是什么需求。还是我理解错了?
直接外部操作不就行了,何必这么繁。


查看完整回答
反对 回复 2023-04-21
?
湖上湖

TA贡献2003条经验 获得超2个赞

你的意思是要在类内部指定哪些成员要被序列化吧:

1)让你的类去实现Serializable接口(5.1就支持了),自己写个serialize方法返回json_encode过的数据;

2)或者去实现JsonSerializable接口(5.4+)。


查看完整回答
反对 回复 2023-04-21
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信