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();

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


посмотреть Шаблонный метод шаблон.