4

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

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

本质上,我希望做的是:

  1. 将所有 PHP 文件包含在一个目录中。
  2. 测试每个包含是否引入了基类的新子类。

但是我想在一个隔离的 PHP 环境中进行包含,这样我就可以免受包含 PHP 文件可能引入的任何错误和警告的影响。

这是一个小例子:

基类.php

<?php
abstract class BaseClass {}
?>

FirstSubclass.php

<?php
class FirstSubclass extends BaseClass {}
?>

废话.php

<?php
class SecondSubclass extends BaseClass {}
?>

坏代码.php

<?php
adfgklmdflgksdfge@#4234t0q3
?>

主文件

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

预期产出

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

2 回答 2

2

使用这个功能

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

如何在php中获取一个类的所有子类

于 2013-02-20T06:28:21.627 回答
0

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

于 2013-02-20T06:37:59.387 回答