私は2つのクラスを持っています:
class animal{
public function walk(){
walk;
}
}
class human extends animal{
public function walk(){
with2legs;
}
}
このように、human-> walk()を呼び出すと、with2legsでのみ実行されます。
しかし、私は親の散歩を実行したいです。あまりにも。
私はそれをこのように変更できることを知っています:
class human extends animal{
public function walk(){
parent::walk();
with2legs;
}
}
しかし、問題は、私には多くのサブクラスがあり、parent :: walk();を配置したくないということです。すべての子walk()に。クラスを拡張するようにメソッドを拡張する方法はありますか?オーバーライドせずに、実際にメソッドを拡張します。それとももっと良い選択肢がありますか?
ありがとう。
私は使うだろう "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;
}
}
このように私はただ呼び出す必要があります:
// 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();
子供に道を歩かせるために...
テンプレートメソッドパターンを参照してください。