0
class A {}
class B extends A {}
class C extends A {}
class D extends C {}

$class="C";
if ($class instanceof A) {  //This is just for demonstration - I know instanceof won't work!!!
   $object=new $class("","",1)
}

文字列「C」をチェックして、このクラス名がAの子であることを確認するにはどうすればよいですか?

私は調べましis_a()たが、それは役に立ちません。

クラス名を動的に取得していて、コンストラクターに渡すパラメーターがわからないとインスタンス化できないため、特に「C」を求めています!

4

3 に答える 3

2

PHP のリフレクション クラスを使用して、文字列名を指定してクラスの継承を調べることができます。たとえば、次のようにすべての親クラスの配列を簡単に作成できます。

$class = new ReflectionClass('whatever');

$parents = array();
$current_class = $class;
while ($current_class = $current_class->getParentClass()) {
    $parents[] = $current_class->getName();
}
var_dump($parents);

もちろん、これは を使用してオブジェクトをインスタンス化するよりも面倒だと思うかもしれませんinstanceof

ReflectionClassには、名前が与えられたクラスのプロパティを見つけることに興味があるように見えるので、役立つ可能性のある興味深いメソッドが他にもたくさんあります。

詳細については、リンクを確認してください。

http://php.net/manual/en/class.reflectionclass.php

たとえば、次のように、現在のクラスのコンストラクターに必要なパラメーターに関する情報を取得できます。

$class = new ReflectionClass('whatever');
$const_params = $class->getConstructor()->getParameters();
var_dump($const_params);
于 2012-12-05T18:35:02.313 に答える
2

is_a()is_subclass_of()、またはを見てくださいget_parent_class()

注:これらの関数には、文字列だけでなく、問題のオブジェクトのインスタンスが必要です。

于 2012-12-05T18:28:17.253 に答える
0

それを使用するにはオブジェクトのインスタンスが必要ですinstanceof: PHP DOC on instanceOF

$class =  "C";
if (new $class instanceof A) {
    var_dump("Ok");
}

または単に

$class = new ReflectionClass("C");
if ($class->getParentClass()->name == "A") {
    echo "OK";
}
于 2012-12-05T18:30:57.797 に答える