*/ private array $aliases = [ 'arrayserializable' => ArraySerializableHydrator::class, ArraySerializable::class => ArraySerializableHydrator::class, 'arrayserializablehydrator' => ArraySerializableHydrator::class, ClassMethods::class => ClassMethodsHydrator::class, 'classmethods' => ClassMethodsHydrator::class, 'classmethodshydrator' => ClassMethodsHydrator::class, 'delegatinghydrator' => DelegatingHydrator::class, ObjectProperty::class => ObjectPropertyHydrator::class, 'objectpropertyhydrator' => ObjectPropertyHydrator::class, 'objectproperty' => ObjectPropertyHydrator::class, Reflection::class => ReflectionHydrator::class, 'reflectionhydrator' => ReflectionHydrator::class, 'reflection' => ReflectionHydrator::class, // Legacy Zend Framework aliases 'Zend\Hydrator\ArraySerializable' => ArraySerializableHydrator::class, 'Zend\Hydrator\ClassMethods' => ClassMethodsHydrator::class, 'Zend\Hydrator\ObjectProperty' => ObjectPropertyHydrator::class, 'Zend\Hydrator\Reflection' => ReflectionHydrator::class, ]; /** @var array */ private array $factories = []; public function __construct() { /** @psalm-suppress UnusedClosureParam */ $invokableFactory = static fn(ContainerInterface $container, string $class): object => new $class(); $this->factories = [ ArraySerializableHydrator::class => $invokableFactory, ClassMethodsHydrator::class => $invokableFactory, DelegatingHydrator::class => new DelegatingHydratorFactory(), ObjectPropertyHydrator::class => $invokableFactory, ReflectionHydrator::class => $invokableFactory, ]; } /** * {@inheritDoc} */ public function get($id) { $class = $this->resolveName($id); if (! $class) { throw Exception\MissingHydratorServiceException::forService($id); } return ($this->factories[$class])($this, $class); } /** * {@inheritDoc} */ public function has($id) { return null !== $this->resolveName($id); } /** * Resolve a service name from an identifier. */ private function resolveName(string $name): ?string { if (isset($this->factories[$name])) { return $name; } if (isset($this->aliases[$name])) { return $this->aliases[$name]; } return $this->aliases[strtolower($name)] ?? null; } }