&$affectedObjectClasses) { if (!is_subclass_of($entityTypeClass, EntitySaveHandlerInterface::class)) { throw new \LogicException( sprintf( 'EntitySaveHandler "%s" must implement %s', $entityTypeClass, EntitySaveHandlerInterface::class ) ); } $affectedObjectClasses = array_map(function ($affectedClass) { return trim($affectedClass, '\\'); }, $affectedObjectClasses); } $this->objectManager = $objectManager; $this->classNameNormalizer = $classNameNormalizer; $this->commonSaveHandler = $commonSaveHandler; $this->entityTypes = $entityTypes; } public function get(string $objectClass): EntitySaveHandlerInterface { $objectClass = $this->classNameNormalizer->execute($objectClass); foreach ($this->entityTypes as $entityTypeClass => $affectedObjectClasses) { foreach ($affectedObjectClasses as $affectedObjectClass) { if ($objectClass === $affectedObjectClass || \is_subclass_of($objectClass, $affectedObjectClass)) { return $this->objectManager->get($entityTypeClass); } } } return $this->commonSaveHandler; } }