@danyvasnafig

Как работает наследование статических методов в php?

Как работает наследование? Почему данный код выведет надпись из 'class A'? Разве после наследования, у класса B не появится свой личный статический метод getMessage, который через self будет брать свой личный getString()? Почему он берет его именно из класса А?
Class A
{
    public static function getMessage():string
    {
      return 'message - '.self::getString();
    }
    public static function getString():string
    {
      return 'class A';
    }
}


Class B extends A
{
  public static function getString():string
  {
    return 'class B';
  }
}


echo B::getMessage();
  • Вопрос задан
  • 2086 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Статические ссылки на текущий класс, такие как self:: или __CLASS__, вычисляются используя класс, к которому эта функция принадлежит, как и в том месте, где она была определена
...
Позднее статическое связывание пытается устранить это ограничение, предоставляя ключевое слово, которое ссылается на класс, вызванный непосредственно в ходе выполнения.
Позднее статическое связывание

Решение:
public static function getMessage(): string
{
  return 'message - ' . static::getString();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LemonFox
stateless mind
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы