2012-04-25 28 views
1

これは、基本的なクラスのデザインですPHP - オブジェクト指向実践と継承

class CustomModule { 

    public __construct() { } 

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

} 

class Randomizer extends CustomModule { 

    public __construct() { } 

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

} 

私は私が最初に実行するCustomModule->exec()が必要にextern開発者のためのプラグイン/モジュールシステムを設計していますように、私はそれを残したくありませんデベロッパーまでbase->exec($str)に電話する必要があります。

Randomizer::exec()にコードを入れなくてもRandomizer::exec()が呼び出される前に、自動的に呼び出されるCustomModule::exec()が必要です。これはおそらく魔法の機能で可能でしょうか?私の意見で

答えて

2

を終了する必要が申し訳ありません、それはあなたがこのための工場が必要であることを意味している。これはどのようにあります

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

基本的には、コード。

+0

はい私の最後の投稿ごとに知っています。面倒で少し狂っていた。いくつかの睡眠を必要とする徴候。ありがとうございました – IEnumerable

3

、私はこの方法を使用します。 代わりに_呼び出しのランダマイザの幹部で構成し、あなたはランダマイザでコンストラクタを定義し、親を呼び出すことができます:: _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); 
} 

}

+0

"Randomizerのexecで_constructを呼び出すのではなく.."サンプルの__construct()にコードがありませんでした。しかし、チップのおかげで。私のサンプルをうんざりさせる。歓声 – IEnumerable

+1

さて、幸運:-) – Tobi

2

もう少し私はこれは悪い設計で実現考え後。私はコードベースを単純でスケーラブルに保つ必要があり、これは大規模なプロジェクトでは混乱を招くだけです。

Randomizer :: exec()を呼び出す唯一のプログラムは、私の社内構築プログラムです。前の行でCustomModule :: exec()を呼び出して、ブール型応答を取得して次の行に進むべきかどうかを確認できます。あなたは、「アプリケーションの残りの部分に*それを解放することができます前に、あなたのオブジェクトは、いくつかの初期化が必要な場合は

このQ」短い

関連する問題