Model properties now can be typed as enums.

With this PHP 8.0 support is dropped.
This commit is contained in:
KJ 2024-08-27 19:01:02 -04:00
parent daf7250882
commit df424ffab5
1 changed files with 15 additions and 4 deletions

View File

@ -242,11 +242,18 @@ class Model {
*/ */
protected static function getInstance(array $elem = []): static protected static function getInstance(array $elem = []): static
{ {
$class = get_called_class(); $class = get_called_class();
$instance = new $class; $instance = new $class;
$reflection = new ReflectionClass($instance);
$properties = $reflection->getProperties();
$propertyNames = array_column($properties, 'name');
foreach ($elem as $key => $value) { foreach ($elem as $key => $value) {
$instance->$key = $value; $index = array_search($key, $propertyNames);
if (is_numeric($index) && enum_exists($properties[$index]->getType()->getName()))
$instance->$key = $properties[$index]->getType()->getName()::tryfrom($value);
else
$instance->$key = $value;
} }
return $instance; return $instance;
@ -278,10 +285,14 @@ class Model {
$result[$value] = isset($this->$value) $result[$value] = isset($this->$value)
? $this->$value: null; ? $this->$value: null;
foreach ($result as $i => $property) foreach ($result as $i => $property) {
if (gettype($property) == 'boolean') if (gettype($property) == 'boolean')
$result[$i] = $property ? '1' : '0'; $result[$i] = $property ? '1' : '0';
if ($property instanceof \UnitEnum)
$result[$i] = $property->value;
}
return $result; return $result;
} }