2012-01-10 10 views
2

私はクラス名を持っています。 クラスがインスタンス化せずに別のクラスを継承するかどうかをチェックする方法は?[PHP]クラスがインスタンス化せずに別のクラスを継承するかどうかをチェックするには?

if (!class_exists($controller)) //AND I have check type 
     { 

      $objectController = new IndexController(); 
      $objectController->index(); 
     } 
+1

あなたはhttp://stackoverflow.com/questions/1836782/a-function-to-determine-whether-のようなものを見てきましたone-type-extend-or-inherits-another-in-php – jprofitt

+0

The Fine Manualは十分に役に立たない? http://php.net/manual/en/function.is-a.php – Piskvor

+0

オブジェクトを作成せずにタイプを確認する必要があります。 – BILL

答えて

-1

あなたはそのためにリフレクションを使用する必要があります、それはかなり大きなトピックだ:あなたはまだ疑問を持っている場合は、ほとんどのドキュメントで

http://ca.php.net/manual/fr/book.reflection.php

見て、何かを試してみて、より正確なものその話題に関する別の質問を投稿してください。

+0

議決権行使は、そのwrognの回答ではなく、はるかに優れたものがあるためです。 – Seti

+0

もし答えが全く悪くないなら、あなたはそれをdownvoteしてはいけません、あなたはそれをアップアップして、良いものをupvoteしてはいけません...あなたが間違った答えを選んだので、何のためにも私を罰するので、 ...ちょうど私の2セント –

+0

実際に問題はstackoverflowにあります。リストの一番上の答えは、ほとんどのアップボックスを持つものでなければなりません。私は簡単な答えを見つけるためにここに来て、いつものように私は選ばれた答えを見ます。しかし、私が実際に必要とするのはis_subclass_ofです。シンプルで速く、仕事をします。 – NickSoft

5

私はこれが古い質問ですが、Googleで高い評価を受けていますが、ここで私をリバースの代替手段を探しています。何も見つけなかった後、私はすべてここに実例を掲載することにしました。

これは反射を使用して行うことができます。リフレクションにあまり依存しないようにしてください。リソースを集中的に使用できるためです。

class TestA {} 
class TestB extends TestA {} 
class TestC extends TestA {} 

$reflector = new ReflectionClass('TestA'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // false 

$reflector = new ReflectionClass('TestB'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // true 

$reflector = new ReflectionClass('TestC'); 
$result = $reflector->isSubclassOf('TestA'); 
var_dump($result); // false 

クラスの反射の詳細情報については、http://php.net/reflection

+0

最後の結果は、TestCがTestAを継承しているため、「真」を返し、「偽」は返しません。また、TestDがTestBを拡張する場合、(新しいReflectionClass( 'TestD')) - > isSubclassOf( 'TestA'); "true"を返す必要があります – niconoe

14

スーパー古い質問を参照してください、一般的に反射詳細についてhttp://www.php.net/manual/en/class.reflectionclass.php

を参照してください、しかし、再びそれがうまくグーグルです。

あなたはis_subclass_ofを使用することができます。

http://php.net/manual/en/function.is-subclass-of.php

class TestA {} 
class TestB extends TestA {} 
class TestC extends TestB {} 

var_dump(is_subclass_of('TestA', 'TestA')); // false 
var_dump(is_subclass_of('TestB', 'TestA')); // true 
var_dump(is_subclass_of('TestC', 'TestA')); // true 
+1

クラス名が存在しない場合は、is_subclass_ofがオートローダーを呼び出します。 3番目のパラメータがFALSEの場合は、最初のパラメータとして文字列を指定することはできません。 – TechNyquist

関連する問題