$data * @return static */ abstract public static function fromArray(array $data): self; /** * Converts the instance to an array. * * @return array */ abstract public function toArray(): array; /** * Converts the instance to JSON. * * @return string */ public function toJson(): string { return json_encode($this->toArray(), JSON_THROW_ON_ERROR); } /** * Creates an instance from JSON. * * @param string $json * @return static */ public static function fromJson(string $json): self { /** @var array $data */ $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR); return static::fromArray($data); } }