diff options
Diffstat (limited to 'vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php')
-rw-r--r-- | vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php | 102 |
1 files changed, 12 insertions, 90 deletions
diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php index b54ca909c..6b7a1ecc2 100644 --- a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php +++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php @@ -7,13 +7,12 @@ * @copyright 2018 Smiley * @license MIT */ -declare(strict_types=1); namespace chillerlan\Settings; -use InvalidArgumentException, ReflectionClass, ReflectionProperty; -use function array_keys, get_object_vars, is_object, json_decode, - json_encode, method_exists, property_exists, serialize, unserialize; +use ReflectionClass, ReflectionProperty; + +use function get_object_vars, json_decode, json_encode, method_exists, property_exists; use const JSON_THROW_ON_ERROR; abstract class SettingsContainerAbstract implements SettingsContainerInterface{ @@ -21,7 +20,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ /** * SettingsContainerAbstract constructor. */ - public function __construct(iterable|null $properties = null){ + public function __construct(iterable $properties = null){ if(!empty($properties)){ $this->fromIterable($properties); @@ -50,7 +49,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ /** * @inheritdoc */ - public function __get(string $property):mixed{ + public function __get(string $property){ if(!property_exists($this, $property) || $this->isPrivate($property)){ return null; @@ -68,7 +67,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ /** * @inheritdoc */ - public function __set(string $property, mixed $value):void{ + public function __set(string $property, $value):void{ if(!property_exists($this, $property) || $this->isPrivate($property)){ return; @@ -121,19 +120,13 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ * @inheritdoc */ public function toArray():array{ - $properties = []; - - foreach(array_keys(get_object_vars($this)) as $key){ - $properties[$key] = $this->__get($key); - } - - return $properties; + return get_object_vars($this); } /** * @inheritdoc */ - public function fromIterable(iterable $properties):static{ + public function fromIterable(iterable $properties):SettingsContainerInterface{ foreach($properties as $key => $value){ $this->__set($key, $value); @@ -145,14 +138,14 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ /** * @inheritdoc */ - public function toJSON(int|null $jsonOptions = null):string{ - return json_encode($this, ($jsonOptions ?? 0)); + public function toJSON(int $jsonOptions = null):string{ + return json_encode($this, $jsonOptions ?? 0); } /** * @inheritdoc */ - public function fromJSON(string $json):static{ + public function fromJSON(string $json):SettingsContainerInterface{ $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR); return $this->fromIterable($data); @@ -161,80 +154,9 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{ /** * @inheritdoc */ + #[\ReturnTypeWillChange] public function jsonSerialize():array{ return $this->toArray(); } - /** - * Returns a serialized string representation of the object in its current state (except static/readonly properties) - * - * @inheritdoc - * @see \chillerlan\Settings\SettingsContainerInterface::toArray() - */ - public function serialize():string{ - return serialize($this); - } - - /** - * Restores the data (except static/readonly properties) from the given serialized object to the current instance - * - * @inheritdoc - * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable() - */ - public function unserialize(string $data):void{ - $obj = unserialize($data); - - if($obj === false || !is_object($obj)){ - throw new InvalidArgumentException('The given serialized string is invalid'); - } - - $reflection = new ReflectionClass($obj); - - if(!$reflection->isInstance($this)){ - throw new InvalidArgumentException('The unserialized object does not match the class of this container'); - } - - $properties = $reflection->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY)); - - foreach($properties as $reflectionProperty){ - $this->{$reflectionProperty->name} = $reflectionProperty->getValue($obj); - } - - } - - /** - * Returns a serialized string representation of the object in its current state (except static/readonly properties) - * - * @inheritdoc - * @see \chillerlan\Settings\SettingsContainerInterface::toArray() - */ - public function __serialize():array{ - - $properties = (new ReflectionClass($this)) - ->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY)) - ; - - $data = []; - - foreach($properties as $reflectionProperty){ - $data[$reflectionProperty->name] = $reflectionProperty->getValue($this); - } - - return $data; - } - - /** - * Restores the data from the given array to the current instance - * - * @inheritdoc - * @see \chillerlan\Settings\SettingsContainerInterface::fromIterable() - */ - public function __unserialize(array $data):void{ - - foreach($data as $key => $value){ - $this->{$key} = $value; - } - - } - } |