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

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

WBOY
Release: 2016-06-06 20:51:11
Original
1538 people have browsed it

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

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template