$name; } return NULL; } public function __set(string $name, mixed $value): void { if ( ! property_exists($this, $name)) { throw new InvalidArgumentException("Undefined property: {$name}"); } $this->$name = $value; } public function __call(string $name, array $arguments): mixed { if (method_exists($this, $name)) { return $this->$name(...$arguments); } // Getters if (empty($arguments)) { // The property as a method is required for Twig it appears if (property_exists($this, $name)) { return $this->$name; } if (str_starts_with($name, 'get')) { return $this->__get(lcfirst(substr($name, 3))); } if (str_starts_with($name, 'is')) { return $this->__get(lcfirst(substr($name, 2))); } throw new InvalidArgumentException("Undefined method: {$name}"); } // Setters if (str_starts_with($name, 'set')) { $var = lcfirst(substr($name, 3)); $this->__set($var, ...$arguments); return $this; } throw new InvalidArgumentException("Undefined method: {$name}"); } }