Если я объявляю базовый класс следующим образом:
abstract class Parent { protected static $message = "UNTOUCHED"; public static function yeah() { static::$message = "YEAH"; } public static function nope() { static::$message = "NOPE"; } public static function lateStaticDebug() { return(static::$message); } }
а затем расширьте его:
class Child extends Parent { }
а затем выполните следующее:
Parent::yeah(); Parent::lateStaticDebug(); // "YEAH" Child::nope(); Child::lateStaticDebug(); // "NOPE" Parent::yeah(); Child::lateStaticDebug() // "YEAH"
Есть ли способ, чтобы мой второй класс, который наследует от первого, также наследует свойства, а не только методы?
Мне просто интересно, есть ли что-то о поздней статической привязке PHP, а также наследование, которое позволит это. Я уже взламываю свой путь вокруг этого … Но, похоже, не имеет смысла, что незаявленное статическое свойство будет падать на родителя для значения !?
Наследование и static
свойства когда-то приводят к «странным» вещам в PHP.
Вы должны взглянуть на Late Static Bindings в руководстве PHP: он объясняет, что может случиться при наследовании и использовании static
свойств в PHP <= 5.2; и дает решения для PHP> = 5.3, где вы можете использовать static::
keywords вместо self::
, так что статическая привязка выполняется при выполнении (а не компиляции) времени.
Ответ «с обходом».
Вам нужно создать статический конструктор и вызвать его для копирования свойства.