首頁  >  文章  >  後端開發  >  oop - PHP:如何在调用$obj->some_attr之前自动调用$obj->some_func()

oop - PHP:如何在调用$obj->some_attr之前自动调用$obj->some_func()

WBOY
WBOY原創
2016-06-06 20:51:111517瀏覽

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

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

有没有什么更“魔术”一点的方法。。?
我实在不想弄个$obj->to_json()这种东西。。。

回复内容:

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

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

有没有什么更“魔术”一点的方法。。?
我实在不想弄个$obj->to_json()这种东西。。。

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

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

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

<?php class 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);

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn