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