Use late static binding in traits

This commit is contained in:
Sebastian Meyer 2023-11-11 20:06:53 +01:00
parent 3f5bcbf26b
commit ac57fcfd32
3 changed files with 12 additions and 10 deletions

View File

@ -45,12 +45,12 @@ trait Getter
{
$method = 'magicGet' . ucfirst($property);
if (
property_exists(get_called_class(), $property)
&& method_exists(get_called_class(), $method)
property_exists(static::class, $property)
&& method_exists(static::class, $method)
) {
return $this->$method();
} else {
throw new InvalidArgumentException('Invalid property or missing getter method for property: ' . get_called_class() . '->' . $property . '.');
throw new InvalidArgumentException('Invalid property or missing getter method for property: ' . static::class . '->' . $property . '.');
}
}

View File

@ -46,12 +46,12 @@ trait Setter
{
$method = 'magicSet' . ucfirst($property);
if (
property_exists(get_called_class(), $property)
&& method_exists(get_called_class(), $method)
property_exists(static::class, $property)
&& method_exists(static::class, $method)
) {
$this->$method($value);
} else {
throw new InvalidArgumentException('Invalid property or missing setter method for property: ' . get_called_class() . '->' . $property . '.');
throw new InvalidArgumentException('Invalid property or missing setter method for property: ' . static::class . '->' . $property . '.');
}
}

View File

@ -40,20 +40,22 @@ trait Singleton
*
* @param mixed ...$args Parameters for the constructor
*/
public static function getInstance(mixed ...$args): self
final public static function getInstance(mixed ...$args): static
{
$class = static::class;
if (!isset(static::$singleton[$class])) {
static::$singleton[$class] = new $class(...$args);
static::$singleton[$class] = new static(...$args);
}
return static::$singleton[$class];
}
/**
* This is a singleton class, thus the constructor is protected.
* This is a singleton class, thus the constructor is private.
* (Get an instance of this class by calling self::getInstance())
*
* @param mixed ...$args Parameters for the constructor
*/
abstract protected function __construct();
abstract private function __construct(mixed ...$args);
/**
* This is a singleton class, thus cloning is prohibited.