1

これが基本的なクラスデザインです

class CustomModule {

    public __construct() {  }

    //Run me first automaticly  
    public function exec($str) {  } 

}

class Randomizer extends CustomModule {

    public __construct() {  }

    //Call me
    public function exec($str) {  } 

}

extern開発者向けのプラグイン/モジュールシステムを設計しているので、CustomModule->exec()最初に実行する必要があるので、を呼び出す必要があるのは開発者に任せたくありません base->exec($str)

コードを入れなくても呼び出されるCustomModule::exec()前に自動的に呼び出されたい。これはおそらく魔法の機能で可能ですか?Randomizer::exec()Randomizer::exec()

4

3 に答える 3

3

私の意見では、私はこのように使用します: Randomizerのexecで_constructを呼び出す代わりに、Randomizerでコンストラクターを定義し、parent::_constructを呼び出すことができます

class CustomModule {

//Run me first automaticly  
public function exec($str) {  } 

public __construct($str) {
   $this->exec($str);
}

}

class Randomizer extends CustomModule {

//Call me
public function exec($str) {  
   parent::__construct($str);
} 

}

于 2012-04-25T06:00:03.577 に答える
2

もう少し考えてみたところ、これは悪いデザインだと気づきました。コードベースをシンプルでスケーラブルに保つ必要がありますが、これは大規模なプロジェクトでのみ混乱を招きます。

Randomizer :: exec()を呼び出す唯一のプログラムは社内で作成したプログラムなので、前の行でCustomModule :: exec()を呼び出すだけで、ブール応答を取得して次の行に進む必要があるかどうかを確認できます。

このQ'ショートを終了する必要があります申し訳ありません

于 2012-04-25T06:09:25.577 に答える
2

オブジェクトをアプリケーションの残りの部分に「リリース」する前にオブジェクトの初期化が必要な場合は、そのためのファクトリが必要であることを意味します。これは、メソッドを1回だけ呼び出す必要がある場合に、オブジェクトを解決する方法です。

メソッドを呼び出すたびにそのような実行が発生する場合exec()は、代わりに、ある種の包含(デコレータの形式またはオブジェクトの標準的な構成)を使用する必要があります。

基本的に、コードを再構築する必要があります。

于 2012-04-25T06:10:36.353 に答える