Это очень странно в использовании.Вероятно, лучше иметь внешний реестр для вашего модуля.Но я думаю, что вы просите об этом:
Файл: Extensions.php:
namespace Project\Extensions;
use \Project\Extensions\Modules\ModuleMaster;
class Extensions
{
public function getLoadedModules()
{
var_dump(ModuleMaster::getLoadedModules());
}
}
Файл: Modules \ ModuleMaster.php:
namespace Project\Extensions\Modules;
abstract class ModuleMaster
{
public static function getLoadedModules() {
$parent = self::class;
return array_values(array_filter(\get_declared_classes(), function ($class) use ($parent) {
return in_array($parent, class_parents($class));
}));
}
}
Файл:Modules \ ModuleA.php:
namespace Project\Extensions\Modules;
use \Project\Extensions\Modules\ModuleMaster;
class ModuleA extends ModuleMaster
{
}
Пример использования:
$e = new \Project\Extensions\Extensions;
$e->getLoadedModules();
Пример результата:
array(1) {
[0]=>
string(34) "Project\Extensions\Modules\ModuleA"
}
Обратите внимание, что код работает, только если весь ваш классфайлы включаются в контекст перед запуском getLoadedModules()
.PHP не будет знать, что ваш класс существует, если он еще не загружен в контекст.