collection-crud/src/Entity/GetSetTrait.php

33 lines
859 B
PHP
Raw Normal View History

2022-09-29 20:09:31 -04:00
<?php declare(strict_types=1);
namespace App\Entity;
2022-09-30 10:49:02 -04:00
use InvalidArgumentException;
2022-09-29 20:09:31 -04:00
2022-09-30 10:49:02 -04:00
trait GetSetTrait
{
public function __call(string $name, array $arguments): mixed
{
if (method_exists($this, $name)) {
return $this->{$name}(...$arguments);
}
2022-09-29 20:09:31 -04:00
2022-09-30 10:49:02 -04:00
// Apparently Doctrine first tries the method with the same
// name as the property, instead of with the get prefix
if (property_exists($this, $name) && empty($arguments)) {
return $this->{$name};
}
2022-09-29 20:09:31 -04:00
2022-09-30 10:49:02 -04:00
if (str_starts_with('set', $name)) {
$var = lcfirst(str_replace('set', '', $name));
if (property_exists($this, $var)) {
$this->{$name} = $arguments[0];
}
2022-09-29 20:09:31 -04:00
2022-09-30 10:49:02 -04:00
return $this;
}
throw new InvalidArgumentException("Undefined method: {$name}");
}
2022-09-29 20:09:31 -04:00
}