Как работает наследование статических методов в 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();

21 Авг 2019 в 06:59
182 +1
0
Ответы
1

В случае статических методов в PHP наследование работает иначе, чем для обычных методов. При вызове статического метода через self:: в PHP происходит вызов метода из того же класса, в котором он был объявлен, а не из класса, в котором он был вызван.

Поэтому в данном коде вызов метода self::getString() в методе getMessage() класса A будет всегда ссылаться на метод getString() из класса A, даже если класс B унаследовал этот метод и переопределил его.

Таким образом, вызов B::getMessage() выведет надпись из 'class A', так как метод getMessage() класса A всегда будет использовать метод getString() из этого же класса A, независимо от наследования.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир