2012-03-06 79 views
1

你好我使用Symfony2的框架,以使一个网站。我在PHP中定义的接口,如:体验类实现一个接口

interface AdminPluginInterface { 
    public function getName(); 
} 

现在我想知道的所有类,加载由Symfony2的UniversalClassLoader,实现我的接口,使用他们喜欢的:

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

谢谢为你的答案!

+2

的Symfony无法知道所有的类。当您使用未定义的类时,自动加载器会猜测文件的路径。您需要手动迭代项目中的所有文件,并检查其中的类是否实现了接口。这并不容易。你需要什么?也许你可以用另一种解决方案? – meze 2012-03-06 09:17:45

回答

2

使用is_a()功能尝试:

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

欲了解更多信息,请访问:

+0

也许写的不好,我想获得的贯彻阵列'$ classes' – 2012-03-06 12:43:28

-1

这是有点老了,但我认为

class_implements()

是你所需要的:)

+0

'class_implements'不会通过所有的类搜索作为被要求在该接口的类的列表。 – Kwebble 2017-07-08 11:17:42

2

由于类将它们只能使用自动加载,你不能列出你的源代码中的所有类。你只能得到一个正在使用调用get_declared_classes的类。 一种解决方案是指定一个插件目录,并扫描其中的类文件,导入,然后检查类实现使用class_implements 看看this question answers用于扫描一些代码示例,如果您的接口是由一些声明的类中实现你的界面

+0

+1指出,你不能列出你的源代码,但只有当前加载的那些,这是不平凡搞清楚,如果你不知道磁带自动加载机是如何工作的所有类。 – 2015-12-16 15:00:45