class TopParent
{
protected function foo()
{
$this->bar();
}
private function bar()
{
echo 'Bar';
}
}
class MidParent extends TopParent
{
protected function foo()
{
$this->midMethod();
parent::foo();
}
public function midMethod()
{
echo 'Mid';
}
public function generalMethod()
{
echo 'General';
}
}
今問題は、呼び出す必要があるため、MidParent を拡張するクラスがあるかどうかです。
class Target extends MidParent
{
//How to override this method to return TopParent::foo(); ?
protected function foo()
{
}
}
だから私はこれを行う必要があります:
$mid = new MidParent();
$mid->foo(); // MidBar
$taget = new Target();
$target->generalMethod(); // General
$target->foo(); // Bar
UPDATE 上の親は ActiveRecord クラス、中間は私のモデル オブジェクトです。yii ConsoleApplication でモデルを使用したい。このモデルでは 'user' モジュールを使用していますが、コンソール アプリはこのモジュールをサポートしていません。そのため、ユーザー モジュールが呼び出されるメソッド afterFind をオーバーライドする必要があります。したがって、Target クラスは、コンソール アプリケーションがサポートしないいくつかのモジュールを使用するモデルからいくつかのメソッドをオーバーライドするクラスです。