在 php 中获取父类的所有已定义类

2022-08-30 15:11:31

在包含所有文件后,我需要确定哪些类扩展了父类,因此:

class foo{
}
class boo extends foo{
}
class bar extends foo{
}

我希望能够抓取一个这样的数组:

array('boo','bar');

答案 1

采用Wrikken的答案并使用Scott BonAmi的建议进行更正,您将获得:

$children = array();
foreach( get_declared_classes() as $class ){
  if( is_subclass_of( $class, 'foo' ) )
    $children[] = $class;
}

和 的其他建议对此不起作用,因为它们都期望一个对象的实例,而不是类名。is_a()instanceof


答案 2

如果你需要它,它真的闻起来像是糟糕的代码,基类不应该知道这个。

但是,如果已包含定义(即,您不需要包含可能包含的类的新文件),则可以运行:

$children  = array();
foreach(get_declared_classes() as $class){
    if($class instanceof foo) $children[] = $class;
}

推荐