インターフェイスを実装する抽象クラスがあります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 のように機能しないのはなぜですか?