[PHP-users 2411] Re: クラス名から継承関係を調べる

まつなみ php-users@php.gr.jp
Wed, 03 Oct 2001 04:28:36 +0900


まつなみです。以下はまったくの蛇足です。

kishida> 文字列でクラスを与えてインスタンスが生成できれば。。。

$newclass = "MyClass";
$instance = new $newclass();

というのはできるようです。
でも,デフォルトコンストラクタがなきゃならんのでしょうね。
普通,サブクラスってのはコンストラクタの引数が増えたりするので,
この手法は使えないケースがありますね。

kishida> 直属のクラスしか得られないんですよね。。。
kishida> 延々たどっていけば良いんでしょうけど。

延々たどらず,強引に1回で調べる「カッコ悪い」方法ならあります。

class MyRootClass {
    function descendant_of_myrootclass() { }  // この存在をチェック
    ...
}

これを継承しているクラス(継承クラスの継承クラスの...でもよい)
にはメソッドdescendant_of_myrootclass()があるはずなので,
これの有無でチェックする方法です。

$methods = get_class_methods($classname);
if(in_array('descendant_of_myrootclass', $methods)) {
    // $classnameはMyRootClassを継承してる
}
else {
    // $classnameはMyRootClassを継承していない
}

やっぱり,普通にget_parent_classを数回まわしたほうが綺麗ですね。

以上 蛇足でした♪

-- 
まつなみ <mat@abelia.ocn.ne.jp>
http://putyou.matwerks.com/