Intereting Posts
Я хочу, чтобы мое поле принимало только целые числа, и я сохранил это поле в требуемой проверке? Назначение массива php путем копирования значения или ссылки? Использование ajaxRequest.open для отправки переменной в php Проблемы с кодировкой символов с генерируемыми PHP vCards в Outlook Ошибка синтаксиса MySQL. Не удается решить Почему использование подготовленного оператора mysql более безопасно, чем использование общих функций эвакуации? Steam Web API получает значок изображения значков Совершенно новый для PHP: Catchable fatal error: объект класса stdClass не может быть преобразован в строку Как реализовать обменный курс в PHP? Отправка данных между php и dart Загружать данные Локальный файл с хешем и датой с помощью набора PHP захват печати / требуется вывод в переменной сохранить комментарий MySQL в скрипте PHP DOCX Тип файла в PHP finfo_file – application / zip codeigniter разрешает «http: //» в переменной get

PHP – расширение метода, например, расширение класса

У меня 2 класса:

class animal{ public function walk(){ walk; } } class human extends animal{ public function walk(){ with2legs; } } 

Таким образом, если я вызываю human-> walk (), он работает только с2legs;

Но я хочу, чтобы прогуливалась прогулка родителя; слишком.

Я знаю, что могу изменить его так:

 class human extends animal{ public function walk(){ parent::walk(); with2legs; } } 

Но проблема в том, что у меня много подклассов, и я не хочу помещать parent :: walk (); в каждую прогулку ребенка (). Есть ли способ расширить метод, например, расширить класс? Без переопределения, но действительно расширения метода. Или есть лучшие альтернативы?

Благодарю.

Solutions Collecting From Web of "PHP – расширение метода, например, расширение класса"

Я бы использовал понятия "hook" и abstraction :

 class animal{ // Function that has to be implemented in each child abstract public function walkMyWay(); public function walk(){ walk_base; walkMyWay(); } } class human extends animal{ // Just implement the specific part for human public function walkMyWay(){ with2legs; } } class pig extends animal{ // Just implement the specific part for pig public function walkMyWay(){ with4legs; } } 

Таким образом, мне просто нужно позвонить:

 // Calls parent::walk() which calls both 'parent::walk_base' and human::walkMyWay() $a_human->walk(); // Calls parent::walk() which calls both 'parent::walk_base' and pig::walkMyWay() $a_pig->walk(); 

заставить ребенка идти своим путем …


См. Шаблон метода шаблона .