*/ private $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, ]; /** * @var array */ private $factories = []; public function __construct() { $invokableFactory = function (ContainerInterface $container, string $class) { return 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); } $instance = ($this->factories[$class])($this, $class); return $instance; } /** * {@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; } }