0

と呼ばれる抽象メソッドを持つ他のいくつかのクラスによって拡張された抽象クラスがありchild_save_changes()ます。

テンプレート クラスのメソッドの 1 つが呼び出されon_save_changes()、ユーザーが [送信] をクリックするたびに、このメソッドが別のページから呼び出されます。

このon_save_changes()メソッドは、最初に検証/保存に必要ないくつかのクラス変数を設定し、次に を呼び出しchild_save_changes()、最後に参照ページへのリダイレクトを処理します。

問題は、on_save_changes()別のページからコールバックを介して呼び出しているため、抽象メソッドを呼び出す子クラスがわからないためchild_save_changes()、最初に見つかったものを選択しているだけです。

各メソッドでコードを繰り返すのは効率が悪いように思われるchild_save_changes()ので、過去に同様のシナリオに出くわした人がいるかどうか、また問題を解決するためにどのような行動をとったかを知りたいです。ありがとう。

4

1 に答える 1

0

静的メソッドを使用しているように思えます。そうしないと、説明した問題が合理的に発生しません。

on_save_changes()「抽象メソッドを呼び出す子クラスがわからない」と書きchild_save_changes()ました。しかし、通常の (つまり非静的な) メソッドはクラスから呼び出されるのではなく、オブジェクトから呼び出されます。そして、すべてのオブジェクトは自分がどのクラスに属しているかを正確に認識しているため、どのメソッドが呼び出されるかについて混乱することはありません。

一方、静的メソッドは、そのような継承階層で機能するようには設計されていません。個人的には、コードをリファクタリングして非静的コードに変換することをお勧めしますが、そうしたくない場合は、late static bindingを使用して機能させることができる場合があります。

于 2013-08-07T11:05:10.720 に答える