[PHP-users 19581]Re: インスタンスの生成無しで利用するクラスメソッド内から、同クラスの他メソッド・プロパティを利用する方法について
yuji koga
koga-y @ mcp-net.com
2003年 12月 25日 (木) 18:40:54 JST
お世話になります。古賀です。
komuraさん、レスありがとうございます。
> PHP 4.3.0 以降であれば(PHP 4.3.4 で確認)、以下のように
> debug_backtrace() を使用することで呼び出し元の子クラスの名前が取得
> できるようです。
なるほど、そういう方法もあるのですね。全く気が付きませんでした。
(もっとマニュアルを熟読しないと…)
実は、マニュアルで"magical" PHP constantsなるものを発見し、
http://search.net-newbie.com/php/language.constants.predefined.html
以下のテストコードで
class A{
function getClassName(){
return __CLASS__;
}
}
class B extends A{}
class C extends A{}
echo A::getClassName() .'<br>';
echo B::getClassName() .'<br>';
echo C::getClassName() .'<br>';
結果が
a
a
a
となって、打ちひしがれていた所でした。
頂いたソースを参考にAの定義を
class A{
function getClassName(){
$array = debug_backtrace();
return $array[0]['class'];
}
}
としてテストすると、今度は
a
b
c
となり、希望が見えてきました。
しかし、バージョンによって動作が異なる所が気になります。
当面、4.3.xで行く予定ですので、5.xへの移行時に気を付ければ大丈夫でしょうか?
<? /*********************************
koga-y @ mcp-net.com
*********************************/ ?>
PHP-users メーリングリストの案内