$v) { $this->__set($k, $v); } } public function __set(string $key, $value) { $setter = 'set' . Str::studly($key); if (method_exists($this, $setter)) { $this->$setter($value); } elseif (property_exists($this, $key)) { $this->$key = $value; } } public function __get(string $key) { $getter = 'get' . Str::studly($key); if (method_exists($this, $getter)) { return $this->$getter($this->$key ?? null); } elseif (property_exists($this, $key)) { return $this->$key; } throw new \OutOfBoundsException(sprintf( 'Undefined property %s::%s', static::class, $key )); } public function toArray() { return get_object_vars($this); } public function jsonSerialize() { return $this->toArray(); } public function toJson($options = 0) { return json_encode($this->jsonSerialize(), $options); } }