[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/