Для меня это не имеет смысла:
class A { public static $value = "a"; public static function get_value(){ return self::$value; } } echo A::$value; // a, this makes sense echo A::get_value(); // a, this makes sense class B extends A { public static $value = "b"; } echo B::$value; // b, this makes sense echo B::get_value(); // a? :(
Почему self
указатель работает так, как ожидалось, подобный this
? Есть ли другое ключевое слово, которое можно было бы использовать для этого?
Если я добавлю статическую функцию в класс B, она теперь работает так, как ожидалось.
class B extends A { public static $value = "b"; public static function get_value(){ return self::$value; } } echo B::get_value(); // b :)
Если метод содержал более 1 строки, было бы бессмысленно копировать + вставлять эту функциональность и управлять ею в двух местах …
Поздняя статическая привязка:
http://php.net/manual/en/language.oop5.late-static-bindings.php
поздние статические привязки работают, сохраняя класс, названный в последнем «непереадресованном вызове».
попробуйте использовать static::
ключевое слово вместо self::
в вашем примере.