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

时间:2010-08-12 16:46:29

标签: php inheritance subclass

是否可以在php中获取给定类的所有子类?

3 个答案:

答案 0 :(得分:24)

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

巧合的是,这个实现与Vadim关联的问题中给出了the one

答案 1 :(得分:0)

使用PHP 7.4:

$children = array_filter(get_declared_classes(), fn($class) => is_subclass_of($class, MyClass::class)); 

答案 2 :(得分:0)

function getClassNames(string $className): array
{
    $ref = new ReflectionClass($className);
    $parentRef = $ref->getParentClass();

    return array_unique(array_merge(
        [$className],
        $ref->getInterfaceNames(),
        $ref->getTraitNames(),
        $parentRef ?getClassNames($parentRef->getName()) : []
    ));
}