Как получить расширенный интерфейс с помощью класса Reflection в PHP - PullRequest
1 голос
/ 19 января 2012

У меня есть класс, который реализует интерфейс, и этот интерфейс расширяет другой интерфейс.Настройка примерно такая:

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 ]

1 голос
/ 19 января 2012

Для этого вам не нужно Отражение.Вы можете просто использовать

  • class_implements - вернуть интерфейсы, которые реализованы данным классом

Пример для вашего фрагмента кода:

var_dump(class_implements($obj));

Вывод:

array(2) {
  ["B"]=>
  string(1) "B"
  ["A"]=>
  string(1) "A"
}
1 голос
/ 19 января 2012
<code><?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 "
";

Ваш пример выводит это для меня (IDE отладчик работает на PHP 5.2.17):

Array
(
    [B] => ReflectionClass Object
        (
            [name] => B
        )

    [A] => ReflectionClass Object
        (
            [name] => A
        )

)
...