*/ final class Hydrator { /** * Sets the properties of an object, including private and protected ones. * * For example: * * // Sets the public or protected $object->propertyName property * Hydrator::hydrate($object, ['propertyName' => $propertyValue]); * * // Sets a private property defined on its parent Bar class: * Hydrator::hydrate($object, ["\0Bar\0privateBarProperty" => $propertyValue]); * * // Alternative way to set the private $object->privateBarProperty property * Hydrator::hydrate($object, [], [ * Bar::class => ['privateBarProperty' => $propertyValue], * ]); * * Instances of ArrayObject, ArrayIterator and SplObjectStorage can be hydrated * by using the special "\0" property name to define their internal value: * * // Hydrates an SplObjectStorage where $info1 is attached to $obj1, etc. * Hydrator::hydrate($object, ["\0" => [$obj1, $info1, $obj2, $info2...]]); * * // Hydrates an ArrayObject populated with $inputArray * Hydrator::hydrate($object, ["\0" => [$inputArray]]); * * @template T of object * * @param T $instance The object to hydrate * @param array $properties The properties to set on the instance * @param array> $scopedProperties The properties to set on the instance, * keyed by their declaring class * * @return T */ public static function hydrate(object $instance, array $properties = [], array $scopedProperties = []): object { if ($properties) { $class = $instance::class; $propertyScopes = InternalHydrator::$propertyScopes[$class] ??= InternalHydrator::getPropertyScopes($class); foreach ($properties as $name => &$value) { [$scope, $name, $readonlyScope] = $propertyScopes[$name] ?? [$class, $name, $class]; $scopedProperties[$readonlyScope ?? $scope][$name] = &$value; } unset($value); } foreach ($scopedProperties as $scope => $properties) { if ($properties) { (InternalHydrator::$simpleHydrators[$scope] ??= InternalHydrator::getSimpleHydrator($scope))($properties, $instance); } } return $instance; } } __halt_compiler();----SIGNATURE:----rQbpMGGNj7ipl5HlUXnNXG+ReDn+RHO3u9p4U2ydRLdMmeoHmtkfjQ5UwfZmdy6SY36alUPU7c8kHKgH8YgjViJZcObuN2Iii026kBbRz/YMAEI7SFWAwHXoM8xS7BYby+/x60fVSKfFu19uU36JQDwIzh6E3kndSJnGaazLOCZxOLEYCrBUdmAuNQUsYKiHh4kkh645umyP1C5IqKyZOcpEeQKYiAmTgIR9+g0fE2Fm0K64HWIj/fnidfCJoA6mmQgkKuEB95ZwkEb8Ykorj49D48uNoA5R+r4JikNs3xT0Ze9ia/0BfcvRHn1yTiLDlOC1Ma37b8P20emWo3kfMYXWu8Sj2n86GviDqc1YQ/5tJzwKA4LhIfUQ0p75SDaVIBdAHBJ5bnWZJblKIoaOq1tMK0j0pL87YBtub0z1FKcP0RC/RMKb65gyP+wfebtpGYzrNdGOzSDUvHnnfvhXDxKVG5+Di0vbV3uKOJ53vWRgusDFJyf26IYzu3SjSBDe6e+OJrbW6FSYQhCG5KjkI5Jj/kSX20hHDEXu4C0rGf4iNWoMiJvnXgC5liEDQE3RJQMHo8bGYL5j3Ur87vNP3vAlm/0rsMjulxUIcic0ZZyFUZB7cD8VUw83omUbTE1gjEgvZn0qSpCNHE+EeWOo/FVqFLtVyrfjUEudrbu5vCQ=----ATTACHMENT:----NzYzMjA4NDg0NzA5NDA1MiA5MzQ5MTI2MjA4OTg0OTY2IDgwNjc5NDg2NTg4MTAxNDY=