Есть ли способ заставить подклассы PHP наследовать свойства (как статические, так и экземпляры)? - PullRequest
4 голосов
/ 30 июля 2009

Если я объявлю базовый класс следующим образом:

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, а также в наследовании, которое позволило бы это. Я уже обдумываю это ... Но, похоже, не имеет смысла, что необъявленное статическое свойство будет возвращаться к своему родителю для значения!?

Ответы [ 2 ]

1 голос
/ 30 июля 2009
Свойства

наследования и static иногда приводят к "странным" вещам в PHP.

Вам следует взглянуть на Поздние статические привязки в руководстве по PHP: оно объясняет, что может произойти при наследовании и использовании static свойств в PHP <= 5.2; и предлагает решения для PHP> = 5.3, где вы можете использовать ключевые слова static:: вместо self::, чтобы статическое связывание выполнялось во время выполнения (а не компиляции).

0 голосов
/ 07 августа 2009

Ответ "с обходным путем".

Вы должны создать статический конструктор и вызвать его для копирования свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...