class A {さて、こういうクラスがあったとしましょう。
static function getInstance() {
}
protected function A2B() {
echo "A";
}
public function _test() {
self::A2B();
}
}
class B extends A {
public function A2B() {
echo "B";
}
public function test() {
self::A2B();
}
public function test2() {
self::_test();
}
}
A::test();この結果はどうなるでしょうか?
A::test2();
結果は
Bとなるはず(試してません)です。
A
クラスの中で self:: というスコープ定義を使用した場合、あくまでも「自分」を参照します。ですから継承先(B)から関数を呼び出しても、その関数が継承元(A)の関数であれば、self:: は A:: と等価です。
では、継承元(A)から継承先(B)を参照したい場合はどうすればよいのでしょうか?
最近、テーブルクラスの汎用化を行う際に梃子摺った問題で、いまだに解決できていません。
phpのバージョンが 5.3以上であれば、self:: のかわりに static:: を使うことで、呼び出し元のクラスを参照することができるようです。
クラス関数を静的(static)な実装にしてしまっているので、コンストラクタで呼び出し先のクラス名を渡す、などの操作もできず。
困りました。
コアインスタンスだけは動的に生成するようにしようか・・・
0 件のコメント:
コメントを投稿