在PHP中自动查找子类

时间:2013-02-20 06:22:26

标签: php subclass

我要做的是找到扩展某个基类的所有子类。

这与https://stackoverflow.com/a/436204/1369417非常相似,只是在调用函数时类会被加载。

基本上,我希望做的是:

  1. 将所有PHP文件包含在目录中。
  2. 测试每个include是否引入了基类的新子类。
  3. 但是我想在一个孤立的PHP环境中进行包含,这样我就可以防止因包含PHP文件而引入的任何错误和警告。

    这是一个小例子:

    BaseClass.php

    <?php
    abstract class BaseClass {}
    ?>
    

    FirstSubclass.php

    <?php
    class FirstSubclass extends BaseClass {}
    ?>
    

    Blah.php

    <?php
    class SecondSubclass extends BaseClass {}
    ?>
    

    badcode.php

    <?php
    adfgklmdflgksdfge@#4234t0q3
    ?>
    

    main.php

    <?php
    require('BaseClass.php');
    print_r(find_subclasses(BaseClass));
    ?>
    

    预期输出

    Array (
        [FirstSubclass.php] => FirstSubclass,
        [Blah.php] => SecondSubclass,
    )
    

2 个答案:

答案 0 :(得分:2)

使用此功能

function getSubclassesOf($parent) {
    $result = array();
    foreach (get_declared_classes() as $class) {
        if (is_subclass_of($class, $parent))
            $result[] = $class;
    }
}

来自how to obtain all subclasses of a class in php

答案 1 :(得分:0)

最简单的方法是阅读文件而不是包含它们,然后自己做一些简单的解析来查找类定义和继承。然后,构建一个可以查询子类和基类的继承层次结构非常容易。