Как работает наследование статических методов в 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();
В случае статических методов в PHP наследование работает иначе, чем для обычных методов. При вызове статического метода через self:: в PHP происходит вызов метода из того же класса, в котором он был объявлен, а не из класса, в котором он был вызван.
Поэтому в данном коде вызов метода self::getString() в методе getMessage() класса A будет всегда ссылаться на метод getString() из класса A, даже если класс B унаследовал этот метод и переопределил его.
Таким образом, вызов B::getMessage() выведет надпись из 'class A', так как метод getMessage() класса A всегда будет использовать метод getString() из этого же класса A, независимо от наследования.
В случае статических методов в PHP наследование работает иначе, чем для обычных методов. При вызове статического метода через self:: в PHP происходит вызов метода из того же класса, в котором он был объявлен, а не из класса, в котором он был вызван.
Поэтому в данном коде вызов метода self::getString() в методе getMessage() класса A будет всегда ссылаться на метод getString() из класса A, даже если класс B унаследовал этот метод и переопределил его.
Таким образом, вызов B::getMessage() выведет надпись из 'class A', так как метод getMessage() класса A всегда будет использовать метод getString() из этого же класса A, независимо от наследования.