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)
让孩子走自己的路......
请参见模板方法模式.