getClassMap()); } } public function getClassesByNamespace($namespace): array { if (! str_starts_with($namespace, '\\')) { $namespace = '\\' . $namespace; } $termUpper = strtoupper($namespace); return array_filter($this->getClasses(), static function ($class) use ($termUpper) { $className = strtoupper($class); if (str_starts_with($className, $termUpper) && ! str_contains($className, strtoupper('Abstract')) && ! str_contains($className, strtoupper('Interface')) ) { return $class; } return false; }); } public function getClasses(): array { $allClasses = []; if (! is_null(self::$classes)) { foreach (self::$classes as $class) { $allClasses[] = '\\' . $class; } } return $allClasses; } }