configuration = $configuration; } public function hasClass(string $className): bool { return array_key_exists($className, $this->configuration); } public function getConfigurationFor(string $className): ?array { return $this->configuration[$className] ?? null; } /** * Resolves all subclasses for the given set of (sub-)classes. * The whole classes configuration is used to determine all subclasses recursively. * * @return array A numeric array that contains all available subclasses-strings as values. */ public function getSubClasses(string $className): array { return $this->resolveSubClassesRecursive($className); } private function resolveSubClassesRecursive(string $className, array $subClasses = []): array { foreach ($this->configuration[$className]['subclasses'] ?? [] as $subclass) { if (in_array($subclass, $subClasses, true)) { continue; } $subClasses[] = $subclass; $subClasses = $this->resolveSubClassesRecursive($subclass, $subClasses); } return $subClasses; } public function getConfiguration(): array { return $this->configuration; } }