我有一个实现接口的类,该接口扩展了另一个接口。设置如下:
interface A{
}
interface B extends A {
}
class C implements B {
}
$obj = new C();
我想知道对象$obj实现了哪些接口。我试图创建一个ReflectionClass对象,然后调用getInterfaces方法,但它只返回接口B:
$reflection = new ReflectionClass($obj);
print_r($reflection->getInterfaces());
我还尝试使用接口名称创建ReflectionClass对象,但当我调用getInterface()方法时,它返回一个空数组。
你们中有人知道如何获得一个扩展给定接口的接口名称吗?
非常感谢你的帮助,Steve
您不需要反射。你可以简单地使用
class_implements
—返回给定类实现的接口
代码片段示例:
var_dump(class_implements($obj));
输出:
array(2) {
["B"]=>
string(1) "B"
["A"]=>
string(1) "A"
}
<?php
interface A {}
interface B extends A {}
class C implements B {}
$obj = new C();
$reflection = new ReflectionClass($obj);
echo "<pre>";
print_r($reflection->getInterfaces());
echo "</pre>";
您的示例为我输出了以下内容(IDE调试器运行在PHP 5.2.17上):
Array
(
[B] => ReflectionClass Object
(
[name] => B
)
[A] => ReflectionClass Object
(
[name] => A
)
)