PHP-像扩展类一样扩展方法

PHP-像扩展类一样扩展方法,php,class,extends,Php,Class,Extends,我有两门课: class animal{ public function walk(){ walk; } } class human extends animal{ public function walk(){ with2legs; } } 这样,如果我调用human->walk(),它只运行2个段 但我想要的是父母的散步;也是 我知道我可以这样修改它: class human extends animal{ publ

我有两门课:

class animal{
    public function walk(){
        walk;
    }
}

class human extends animal{
    public function walk(){
        with2legs;
    }
}
这样,如果我调用human->walk(),它只运行2个段

但我想要的是父母的散步;也是

我知道我可以这样修改它:

class human extends animal{
    public function walk(){
        parent::walk();
        with2legs;
    }
}
但问题是,我有很多子类,我不想把parent::walk()放在;走进每一个孩子。有没有一种方法可以像扩展类一样扩展方法?不重写但真正扩展该方法。还是有更好的选择

谢谢。

我会使用
“hook”
抽象概念:

class animal{

    // Function that has to be implemented in each child
    abstract public function walkMyWay();

    public function walk(){
        walk_base;
        $this->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();
让一个孩子走他的路


请参见



这太棒了,我从没想过从父对象调用子方法!是的,这是我经常使用的设计。在某些情况下非常方便。@OneTrickPony我不知道Tony期望什么,也不知道他真正的用例是什么促使他提出这个问题,但这是一种方法。最糟糕的是,他发现了一种新的可能性;-)。我该睡觉了。。。干杯你知道这是什么吗?不,我不知道这个名字。这是我第一次发现父调用子类方法很有用