PHP - 扩展类扩展方法

Ton*_*ony 14 php extends class

我有2节课:

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

class human extends animal{
    public function walk(){
        with2legs;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,如果我调用human-> walk(),它只运行2legs;

但我希望父母的行走; 太.

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

class human extends animal{
    public function walk(){
        parent::walk();
        with2legs;
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,我有很多子类,我不想把parent :: walk(); 每个孩子走路().有没有办法扩展我扩展类的方法?没有覆盖但真正扩展方法.还是有更好的选择吗?

谢谢.

Gau*_*lio 27

我会用"hook"abstraction概念:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我只需要打电话:

// 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();
Run Code Online (Sandbox Code Playgroud)

让孩子走自己的路......


请参见模板方法模式.


  • 你知道这是[模板方法模式](http://en.wikipedia.org/wiki/Template_method_pattern)吗? (3认同)