I've got an interface
interface IModule {
public function Install();
}
and some classes that implement this interface
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;
}
}
How to get a list of all classes that implement this interface? I'd like to get this list with PHP.
You dont need Reflection for this. You can simply use
class_implements
— Return the interfaces which are implemented by the given class Usage
in_array('InterfaceName', class_implements('className'));
Example 1 - Echo all classes implementing the Iterator Interface
foreach (get_declared_classes() as $className) {
if (in_array('Iterator', class_implements($className))) {
echo $className, PHP_EOL;
}
}
Example 2 - Return array of all classes implementing the Iterator Interface
print_r(
array_filter(
get_declared_classes(),
function ($className) {
return in_array('Iterator', class_implements($className));
}
)
);
The second example requires PHP5.3 due to the callback being an anonymous function.
You can use PHP's ReflectionClass::implementsInterface
and get_declared_classes
functions to accomplish this:
$classes = get_declared_classes();
$implementsIModule = array();
foreach($classes as $klass) {
$reflect = new ReflectionClass($klass);
if($reflect->implementsInterface('IModule'))
$implementsIModule[] = $klass;
}
Generic solution:
function getImplementingClasses( $interfaceName ) {
return array_filter(
get_declared_classes(),
function( $className ) use ( $interfaceName ) {
return in_array( $interfaceName, class_implements( $className ) );
}
);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With