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

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

WBOY
WBOYOriginal
2016-06-06 20:51:111517Durchsuche

诸位看到这个标题可能首先想到的是__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);

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn