私は次のようなクラス階層を持っている:PHP:クラス階層内の同じ名前のメソッドをすべて呼び出すにはどうすればよいですか?
class Alpha {
public function initialize() {
$class = get_class($this);
$family = array($class);
while(($class = get_parent_class($class)) !== false) {
$family[] = $class;
}
$family = array_reverse($family);
foreach($family as $className) {
// call $className's start (instance) method
}
}
public function start() {
echo "calling start from Alpha\n";
}
}
class Beta extends Alpha {
public function start() {
echo "calling start from Beta\n";
}
}
class Charlie extends Beta {
public function start() {
echo "calling start from Charlie\n";
}
}
$c = new Charlie();
$c->initialize();
アルファのinitializeメソッドが戻っアルファのstartメソッドへのすべての方法派生クラスのstartメソッドと同様に、派生クラスの上位クラススタート法のすべてを呼び出す必要があります。コードは次のような出力を生成する必要があります
calling start from Alpha
calling start from Beta
calling start from Charlie
しかし、私は$ classNameの変数で指定された特定の祖先クラスのインスタンスメソッドを呼び出す方法を見つけ出すように見えることはできません。
私はcall_user_func(array($className, 'start'))
を使用しましたが、これはスタティック関数のように扱われます。何か案は?クラス名のようなクラスの関数呼び出しで
を開始? –
私はすべての階層を見ることができません... – uttam
なぜあなたは 'parent :: start()'を避けたいですか?それはちょっと "階層"の仕組みです。また、あなたの例では、3つのクラスは3つの別々のクラスです。ここには「階層」はありません。 –