在抽象类中获取对象变量

时间:2013-05-11 21:07:43

标签: php reflection abstract-class json

我有一个实现JsonSerializable接口的抽象类。

版本1:

abstract class MyBase implements JsonSerializable
{
    public function jsonSerialize()
    {
        var_dump(get_object_vars($this));
        // ...
    }
}

class MyClass extends MyBase
{
    private $id;
    private $name;
}

所以json_encode(new MyClass())返回一个空数组:

  

array(0){}

第2版:

abstract class MyBase implements JsonSerializable
{
    abstract public function jsonSerialize();
}

class MyClass extends MyBase
{
    private $id;
    private $name;

    public function jsonSerialize()
    {
        var_dump(get_object_vars($this));
        // ...
    }
}

所以json_encode(new MyClass())返回一个数组:

  

array(12){[“id”] => int(1)[“name”] => string(1)“name”}

为什么我的解决方案1不像我的解决方案2那样工作?

1 个答案:

答案 0 :(得分:2)

因为属性是私有的!

var_dump(get_object_vars($this));将从该上下文中访问您的属性。

私人成员只能从

中定义的类中访问