[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 メーリングリストの案内