PHP-extend метод как расширение класса
у меня 2 класса:
class animal{
public function walk(){
walk;
}
}
class human extends animal{
public function walk(){
with2legs;
}
}
таким образом, если я называю человека - > walk (), он работает только с2legs;
но я хочу запустить родительскую прогулку; тоже.
Я знаю, что могу изменить его таким образом:
class human extends animal{
public function walk(){
parent::walk();
with2legs;
}
}
но проблема в том, что у меня много подклассов, и я не хочу помещать parent::walk(); в каждый дочерний walk(). Есть ли способ расширить метод, как я расширяю класс? Не переопределяя, но действительно расширяя метод. Или есть лучше альтернативы?
спасибо.
1 ответов
Я хотел бы использовать "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();
чтобы заставить ребенка идти своим путем...
посмотреть Шаблонный метод шаблон.