次のようなクラス階層があります。
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();
Alpha の initialize メソッドは、派生クラスの start メソッドと、Alpha の start メソッドに至るすべての派生クラスの祖先クラスの start メソッドを呼び出す必要があります。コードは次の出力を生成する必要があります。
calling start from Alpha
calling start from Beta
calling start from Charlie
しかし、$className 変数で指定された特定の祖先クラスのインスタンス メソッドを呼び出す方法がわかりません。
私は使用しましcall_user_func(array($className, 'start'))
たが、これにより start メソッドが静的関数のように扱われます。何か案は?