Скажем, у меня есть класс вроде:
<? class ObjectModel { }
и у меня есть другие классы:
<? class SomeNewClass extends ObjectModel { } class SomeOtherNewClass extends ObjectModel { }
Есть ли способ получить детей (SomeNewClass & SomeOtherNewClass) на основе класса ObjectModel?
class ObjectModel { } class SomeNewClass extends ObjectModel { } class SomeOtherNewClass extends ObjectModel { } class SomeOtherNewClassLol extends ObjectModel { } function get_extends_number($base){ $rt=0; foreach(get_declared_classes() as $class) if(is_subclass_of($class,$base)) $rt++; return $rt; } echo get_extends_number('ObjectModel'); //output: 3
Да, вы можете это сделать, DEMO
Вы можете повторять все классы, возвращаемые get_declared_classes()
и проверять их Reflection ( Reflection::isSubclassOf
)
Но – это не сработает, если вы используете автозагрузку.
Не уверен, что это произойдет, но вы можете взломать свой путь:
get_declared_classes
get_parent_class
для каждого класса на 1 Это не очень, но если дочерние классы загружены, это возможно.