Get all extended Classes in PHP

半世苍凉 提交于 2019-11-30 08:37:48

问题


Say I got a class like:

<?
class ObjectModel {
}

and I got some other classes like:

<?
class SomeNewClass extends ObjectModel {
}

class SomeOtherNewClass extends ObjectModel {
}

Is there a way to get the children (SomeNewClass & SomeOtherNewClass) based on the ObjectModel class?


回答1:


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

Yes, you can do it, DEMO




回答2:


You can iterate all classes returned by get_declared_classes() and inspecting their Reflection (Reflection::isSubclassOf)

But - this won't work when you are using autoloading.




回答3:


Not sure if this is going to get downvoted but you can hack your way through:

  1. get_declared_classes
  2. get_parent_class for each class on 1

It's not pretty, but if the child classes are loaded, it's possible.



来源:https://stackoverflow.com/questions/16680040/get-all-extended-classes-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!