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

Kazuhiro Kotsutsumi kotsutsumi @ xenophy.com
2006年 12月 25日 (月) 10:29:01 JST


TO:市橋様
FM:小堤

いつもお世話になっております。
Xenophy 小堤です。

毎度はずしてたらごめんなさい。
これは、class Aにabstractメソッドを用意して、そのメソッドを呼び出すよう
にしてはいかがでしょうか。
その代わり、class Aを継承するクラスには必ず抽象メソッドを実装する必要が
ありますが。

下記のような感じです。

// Class A

class ClassA {

    // 抽象メソッド
    abstract public function hoge();

    function method()
    {
        $this->hoge();
    }
}


class ClassB extends ClassA {

    public function hoge() {
    	echo "This is ClassB Method.";
    }

}

ご参考になれば。

>
>市橋(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 mailing list  PHP-users @ php.gr.jp
>http://ml.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://www.php.gr.jp/php/novice.php3







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