7

假设我有这样的课程:

<?
class ObjectModel {
}

我还有其他一些课程,例如:

<?
class SomeNewClass extends ObjectModel {
}

class SomeOtherNewClass extends ObjectModel {
}

有没有办法基于 ObjectModel 类来获取孩子(SomeNewClass 和 SomeOtherNewClass)?

4

3 回答 3

13
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

于 2013-05-21T21:57:50.900 回答
4

您可以迭代所有由反射返回的类get_declared_classes()并检查它们的反射(Reflection::isSubclassOf

但是 - 当您使用自动加载时,这将不起作用。

于 2013-05-21T21:54:56.937 回答
2

不确定这是否会被否决,但您可以通过以下方式破解:

  1. get_declared_classes
  2. get_parent_class对于每节课 1

这并不漂亮,但如果加载了子类,这是可能的。

于 2013-05-21T21:56:41.190 回答