是否可以在php中获取给定类的所有子类?
答案 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()) : []
));
}