如何在PHP中使用Reflection类获取扩展接口

时间:2012-01-19 17:13:35

标签: php reflection php-5.3

我有一个实现接口的类,该接口扩展了另一个接口。设置如下:

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对象,但是当我调用getInterfaces()方法时,它返回一个空数组。

你们中的任何人都知道如何获得扩展给定界面的接口名称吗?

非常感谢你的帮助, 史蒂夫

2 个答案:

答案 0 :(得分:1)

<?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
        )

)

答案 1 :(得分:1)

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

您的代码段示例:

var_dump(class_implements($obj));

输出:

array(2) {
  ["B"]=>
  string(1) "B"
  ["A"]=>
  string(1) "A"
}