2012-01-19 3 views
1

나는 인터페이스를 구현하는 클래스가 있으며이 인터페이스는 다른 인터페이스를 확장합니다. 설정은 다음과 같습니다 :PHP에서 Reflection 클래스를 사용하여 확장 인터페이스를 얻는 방법

interface A{ 
} 

interface B extends A { 
} 

class C implements B { 
} 


$obj = new C(); 

$ obj가 구현하는 인터페이스를 알고 싶습니다. 나는의 getInterfaces 메소드를 호출 한 후 ReflectionClass 객체를 생성하려했지만 그것은 단지 나에게 인터페이스 B 반환 : 나는 또한 인터페이스 이름을 사용하여 ReflectionClass 개체를 만들려고

$reflection = new ReflectionClass($obj); 
print_r($reflection->getInterfaces()); 

을,하지만 난합니다 (의 getInterfaces를 호출 할 때) 메서드를 호출하면 빈 배열을 반환합니다.

주어진 인터페이스를 확장하는 인터페이스 이름을 얻는 방법을 아는 사람이 있습니까?

감사

+0

수를 재생산되지 않음, ['ReflectionClass :: getInterfaces()']] (http://www.php.net/manua l/en/reflectionclass.getinterfaces.php) 당신이 찾고있는 것을 제공해야합니다. 데모 : http://codepad.viper-7.com/PoDCHm – hakre

답변

1

당신은 반사가 필요하지 않습니다 이것 때문에. 당신은 단순히

  • class_implements을 사용할 수 있습니다 - 당신의 코드에 대한 지정된 클래스

예에 의해 구현되는 인터페이스를 반환 :

var_dump(class_implements($obj)); 

출력 :

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

PHP 버전은 무엇입니까? –

+0

@Steve 5.2.14, 5.3.3, 5.3.6 및 5.4RC5 – Gordon

+1

Ok thx Gordon. 귀하의 솔루션이 작동합니다. 대단히 감사합니다. –

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 
     ) 

) 
+0

PHP 버전은 무엇입니까? –

+0

위 그림 - PHP 5.2.17. 그래도 고든이 맞아. 반사는 필요하지 않습니다. – simshaun

+0

나는 PHP 버전 5.3.6을 사용하고 그 결과는 위에 표시된 것들이다. Thx 어쨌든, 아픈 더 테스트를 수행합니다. –

관련 문제