php5.3以降では遅延静的束縛が使えるようになったので、getやsetのメソッドは親クラスで定義して、値をstatic変数に保持しておくということがやりたかった
<?php
class A
{
static $hoge;
static function get()
{
echo static::$hoge;
}
static function set($value)
{
static::$hoge = $value;
}
}
class B extends A
{
}
class C extends A
{
}
B::set('b');
C::set('c');
B::get(); // 'b'が返ってきて欲しいけど'c'が返ってくる
self
じゃなくてstatic
で呼べば勝手に子クラスで継承された$hoge
に値が入ると思ってたけどそうじゃなかった
// Aの定義は省略
class B extends A
{
static $hoge;
}
class C extends A
{
static $hoge;
}
B::set('b');
C::set('c');
B::get(); // 'b'が返ってくる
子クラスで$hoge
を宣言してやれば解決した