Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 发现实现接口的所有类_Php_Symfony - Fatal编程技术网

Php 发现实现接口的所有类

Php 发现实现接口的所有类,php,symfony,Php,Symfony,嗨,我正在使用symfony2框架制作一个网站。我在PHP中定义了一个接口,如: interface AdminPluginInterface { public function getName(); } 现在我想知道实现我的接口的所有类(可由Symfony2 UniversalClassLoader加载),它们的使用方式如下: foreach ($classes as $class) { $class->getName(); } 谢谢你的回答 尝试使用is_a()函数

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

interface AdminPluginInterface {
    public function getName();
}
现在我想知道实现我的接口的所有类(可由Symfony2 UniversalClassLoader加载),它们的使用方式如下:

foreach ($classes as $class)
{
    $class->getName();
}
谢谢你的回答

尝试使用
is_a()
函数:

foreach ($classes as $class)
{
    $classname = $class->getName();
    var_dump(is_a($classname,'AdminPluginInterface'));
}
有关更多信息,请查看:


    • 这有点旧,但我认为


      是您需要的:)

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

      Symfony无法知道您的所有类。当您使用未定义的类时,Autoloader会猜测文件的路径。您需要手动迭代项目中的所有文件,并检查其中的类是否实现了接口。这并不容易。你需要它做什么?也许你可以使用另一种解决方案?也许写得不好,我想获得数组
      $classes
      +1中实现该接口的类列表,指出你不能列出源代码中的所有类,只能列出当前加载的类,如果你不知道自动加载器是如何工作的,这一点很重要。
      class\u implements
      不会按要求搜索所有类。