[PHP-users 7004] クラス関数から同クラスのクラス関数呼び出し

FURUKAWA Kentaro php-users@php.gr.jp
Fri, 19 Apr 2002 12:09:31 +0900


古川と申します。

演算子 :: によりインスタンスを生成せずにクラス関数を呼ぶことを前提として、
以下のようなクラスを作ったとします。

class A {
  function a1() {
    echo 'A::a1() called<BR>';
  }
  function a2() {
    echo 'A::a2() called<BR>';
    A::a1();
  }
}

これを

class AA extends A {
  function a1() {
    echo 'AA::a1() called<BR>';
  }
}

のように継承してa1()をオーバーライドするときに、継承された関数 AA::a2() 
がオーバーライドされた関数 AA:a1() を呼ぶようにしたいのです。しかし、演算
子 :: を用いて呼ばれたクラス関数中で自分自身のクラスが何であるかを知る方
法がわかりません。当然 $this も使えないですし、やはりインスタンスを作成す
ることを前提とする以外ないのでしょうか。もちろん AA::a2() を改めて定義す
れば期待通りに動きますが、それでは継承の意味がなくなってしまいます。

Singletonにしてもみたのですが、

class A {
  function A() {
  }
  function &getInstance() {
    static $myself;
    if (!isset($myself)) {
      $myself = new A();
    }
    return $myself;
  }
}

結局 getInstance() 中に「A」というクラス名があり、getInstanceが
A::getInstance() として呼ばれなければならない以上、これを継承するとやはり
同じことでした(AA::getInstance() を改めて定義する必要が生じる)。

なにか同じようなことをお考えの方、アイデアがありましたら教えてください。
よろしくお願いします。

-=- -=- -=- -=- -=- -=- -=- -=- -=-
FURUKAWA Kentaro
furukawa@nexis.ne.jp