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())な配列を返します。

array(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 に答える