发现实现接口的所有类


Discover all class implementing an interface

嗨,我正在使用symfony2框架制作一个网站。我在PHP中定义了一个接口,比如:

interface AdminPluginInterface {
    public function getName();
}

现在,我想知道所有可由Symfony2 UniversalClassLoader加载的类,它们实现了我的接口,并像一样使用它们

foreach ($classes as $class)
{
    $class->getName();
}

谢谢你的回答!

由于类只有在使用时才会自动加载,因此无法在源代码中列出所有类。您只能获取已在使用的调用get_declared_classes的类。一种解决方案是指定一个插件目录,扫描它以查找类文件,导入它们,然后检查这些类是否使用class_implements实现了您的接口如果您的接口是由某个已声明的类实现的,请查看以下问题答案,以获取一些要扫描的代码示例

尝试使用is_a()函数:

foreach ($classes as $class)
{
    $classname = $class->getName();
    var_dump(is_a($classname,'AdminPluginInterface'));
}

欲了解更多信息,请查看:

  • is_a()功能
  • 这个评论

这有点旧,但我认为

class_implements()

是您需要的:)