PHP:如何获取实现特定接口的类列表?

2022-08-30 11:00:08

我有一个界面

interface IModule {
    public function Install();
}

和一些实现此接口的类

class Module1 implements IModule {
    public function Install() {
        return true;
    }
}

class Module2 implements IModule {
    public function Install() {
        return true;
    }
}

...

class ModuleN implements IModule {
    public function Install() {
        return true;
    }
}

如何获取实现此接口的所有类的列表?我想用PHP获取此列表。


答案 1

你不需要反射。您可以简单地使用

用法

in_array('InterfaceName', class_implements('className'));

示例 1 - Echo 实现迭代器接口的所有类

foreach (get_declared_classes() as $className) {
    if (in_array('Iterator', class_implements($className))) {
        echo $className, PHP_EOL;
    }
}

示例 2 - 实现迭代器接口的所有类的返回数组

print_r(
    array_filter(
        get_declared_classes(), 
        function ($className) {
            return in_array('Iterator', class_implements($className));
        }
    )
);

第二个示例需要 PHP5.3,因为回调是一个匿名函数。


答案 2

您可以使用 PHP 的 ReflectionClass::implementsInterfaceget_declared_classes 函数来实现此目的:

$classes = get_declared_classes();
$implementsIModule = array();
foreach($classes as $klass) {
   $reflect = new ReflectionClass($klass);
   if($reflect->implementsInterface('IModule')) 
      $implementsIModule[] = $klass;
}

推荐