2

オーバーライドされた親メソッドを呼び出す子クラスの例はたくさんありますが、最も一般的なのはparent::__construct()です。ただし、これらの場合、実際には、子自体の具象メソッドから親を呼び出しています。

継承されたメソッドを使用して、子から最初の祖先へのメソッドを再帰的に呼び出す方法はありますか?

抽象親クラスで使用するparent::methodName()と、「現在のクラススコープに親がない場合は親にアクセスできません」という致命的なエラーが発生します。おそらくこれは、「親」が現在のクラスコンテキストではなく、抽象クラス自体に関連して評価されているためです。

ありがとう...

4

2 に答える 2

1

あなたが何をしようとしているのかよくわかりませんが、

  1. キーワードは、parentそれが発生するクラスに対して相対的に評価されます。parentキーワードを使用するクラスに親がない場合、明らかに機能しません。
  2. 子に親のメソッドを使用させたい場合は、子でそのメソッドをオーバーライドしないでください。子のメソッドをオーバーライドしないだけでよい場合、子に親のメソッドを強制的に呼び出すように親のメソッドを定義しても意味がありません。
  3. method を作成することで、親のメソッドを強制的に「最後の言葉」にすることfinalができます。子はそれをオーバーライドできません。
  4. 子は「祖父母の」メソッドを呼び出すことはできません。これは、親が順番に親を持っていることを子が知らないか、少なくとも保証がないためです。

実際には、次のことを意味します。

  1. 別のクラスではないクラスを作成している場合、そのクラスのどこでextend使用しても意味がありません。parent
  2. extendクラスを作成していて、メソッドをオーバーライドしていない場合は、親のメソッドが自動的に使用されます (継承れます)。
  3. extendクラスを呼び出してメソッドをオーバーライドしている場合、そのオーバーライドされたメソッドから のメソッドを呼び出すことができ、parentそのオーバーライドされたメソッドがそののメソッドなどを呼び出すことができます。parent
于 2012-05-21T02:20:40.500 に答える
0

多分このようなもの?(未テスト)

foreach (get_class_parents($this) as $className) {
    (new ReflectionMethod($className, __METHOD__))->invoke($this, $args...);
}

このちょっとしたジャンクをコードで見るのは嫌いです。

于 2012-05-21T02:45:21.067 に答える