Php 获取抽象类中的对象变量

Php 获取抽象类中的对象变量,php,reflection,abstract-class,json,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; pr

我有一个抽象类,它实现了
JsonSerializable
接口

第1版:

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

class MyClass extends MyBase
{
    private $id;
    private $name;
}
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\u encode(new MyClass())
返回一个空数组:

数组(0){}

第2版:

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

class MyClass extends MyBase
{
    private $id;
    private $name;
}
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\u encode(new MyClass())
返回如下数组:

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


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

因为属性是私有的

var_dump(get_object_vars($this))
将获取可从该上下文访问的属性

只能从中定义私有成员的类访问私有成员