2012-01-19 21 views
1

私はインターフェイスを実装するクラスを持っており、そのインターフェイスは別のインターフェイスを拡張しています。設定は次のようになります。PHPでReflectionクラスを使用して拡張インターフェイスを取得する方法

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を呼び出すとき)メソッドでは、空の配列を返します。

特定のインターフェイスを拡張するインターフェイス名を取得する方法を知っている人はいますか?あなたの助けのための

どうもありがとう、 スティーブ

+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とにかく、病気はより多くのテストを行います。 –

関連する問題