[PHP-users 31113] メソッドの静的呼び出しについて

bobchin bobchin_ryu @ bb.excite.co.jp
2006年 12月 25日 (月) 10:10:18 JST


市橋(bobchin)といいます。

継承先で親クラスのメソッドを静的に呼び出した際に、
親クラス側で呼び出し元を特定できないかを考えていますが、
よい方法が浮かびません。
なにかヒントがあればと思い、投稿しました。

やりたいことは以下の通りです。

class ClassA {
    function method()
    {
        // ここで「ClassB」を取得したい・・・
    }
}

class ClassB extends ClassA {
}

ClassB::method()を呼び出したときに、親クラスClassA上で「ClassB」から
コールされたことを判断る方法(呼び出しもとのクラスが知りたい)です。

PHP4の場合は、debug_backtrace()を使用することで取得できましたが、
PHP5の場合は取得できませんでした。

class ClassA {
    function method()
    {
        $d = debug_backtrace();
        echo $d[0]['class'];
    }
}

class ClassB extends ClassA {
}

「__CLASS__」を使用した場合は、常に記述した場所のクラスを返すようですので、
使用できませんでした。
また、静的に呼び出すので$thisも正しくしようできないように思います。

class ClassA {
    function method()
    {
        echo __CLASS__; // ClassAを返す
    }
}

市橋 <bobchin_ryu @ bb.excite.co.jp>



PHP-users メーリングリストの案内