2012-03-06 26 views
1

こんにちは私はsymfony2フレームワークを使ってウェブサイトを作っています。今、私はのようにそれらを使用するために、それは私のインターフェイスを実装して、すべてのクラス、Symfony2のUniversalClassLoaderによってロード可能を知りたいインターフェイスを実装するすべてのクラスを発見してください

interface AdminPluginInterface { 
    public function getName(); 
} 

foreach ($classes as $class) 
{ 
    $class->getName(); 
} 

おかげで私のようなPHPのインターフェイスを定義しましたあなたの答えに!

+2

Symfonyはすべてのクラスを知ることができません。 Autoloaderは、未定義クラスで作業するときにファイルのパスを推測します。プロジェクト内のすべてのファイルを手作業で繰り返し、そのクラスがインタフェースを実装しているかどうかを確認する必要があります。これは簡単ではありません。何のためにそれが必要ですか?たぶんあなたは別の解決策と一緒に行くことができますか? – meze

答えて

2

is_a()機能使用してみてください:詳細情報については

foreach ($classes as $class) 
{ 
    $classname = $class->getName(); 
    var_dump(is_a($classname,'AdminPluginInterface')); 
} 

を、チェックアウト:

+0

多分それが悪いと書いて、私は配列 '$ classes'でそのインターフェースを実装しているクラスのリストを取得したいと思っています。 –

-1

をこれは少し古いですが、私は

を考えます

class_implements()

何が必要です:)

+0

' class_implements'はすべてのクラスを検索しませんでした。 – Kwebble

2

クラスは、それらが使用されている場合にのみ、自動的にロードされますので、あなたがソースコード内のすべてのクラスを一覧表示することができません。既に使用されているクラスは、get_declared_classesしか呼び出すことができません。 プラグインディレクトリを指定してクラスファイルをスキャンし、それらをインポートしてクラスがインターフェイスを実装しているかどうかを確認することですclass_implements 宣言されたクラスによってインターフェイスが実装されているかどうかを調べるコード例はthis question answers

+0

+1あなたのソースコード内のすべてのクラスをリストすることはできませんが、現在ロードされているクラスだけをリストすることはできません。オートローダーの仕組みがわからない場合は分かりません。 –

関連する問題