PHP: Как вызвать метод родителя, родителя.
Сегодня, мне задали один интересный вопрос: Как вызвать метод, который объявлен в родительском классе, родительского класса? ..
Думаю, многим вопрос будет понятен на примере, поэтому вот он
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class A { public function abc(){ echo 'A'; } } class B extends A { public function abc(){ echo 'B'; } } class C extends B { public function abc(){ // тут надо вызвать метод из класса A } } |
Когда-то я уже сталкивался с подобной проблемой, но к сожалению контекст уже забыл. Тогда я решил проблему, добавив метод, в класс родителя, который вызовет класс своего родителя. Что-то типа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class A { public function abc(){ echo 'A'; } } class B extends A { public function abc(){ echo 'B'; } public function abc_a(){ parent::abc(); } } class C extends B { public function abc(){ parent::abc_a(); } } |
В этот раз мне сказали, что в данном случае ожидается другое решение, без изменения класса. Ответить я не смог, но, к счастью, мне рассказали о нем. Оказывается, в контексте наследника можно вызывать метод родительского класса любой вложенности, через замену parent на имя нужного класса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class A { public function abc(){ echo 'A'; } } class B extends A { public function abc(){ echo 'B'; } } class C extends B { public function abc(){ A::abc(); } } (new С)->abc(); // Выведет "A" |
По истине, век живи - век учись. Изящное решение, больше похожее на какой-то хак 🙂
Author: | Tags: /
| Rating:
1 comment.
Write a comment