0

我有一个实现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())返回一个空数组:

数组(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())返回一个数组,如:

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

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

4

1 回答 1

2

因为房产是私有的!

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

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

于 2013-05-11T21:12:38.510 回答