假设我有一个类:
<?
class ObjectModel {
}
我还有其他类,例如:
<?
class SomeNewClass extends ObjectModel {
}
class SomeOtherNewClass extends ObjectModel {
}
有没有一种方法可以根据ObjectModel类获取其子类(SomeNewClass 和 SomeOtherNewClass)?
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
SomeOtherNewClassLol
扩展了SomeOtherNewClass
,你将得到相同的结果。 - Alix Axelget_declared_classes()
返回的所有类,并检查它们的反射(Reflection :: isSubclassOf
),但是-在使用自动加载时,这种方法行不通。不确定这是否会被下降,但您可以通过以下方式进行黑客攻击:
get_declared_classes
get_parent_class
虽然不很好看,但如果已加载子类,则可能会成功。
parent::__construct()
注册新的子类,但这可能会有些笨重。您能否澄清您的意图? - George Cummins