2012-04-25 21 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) { } 

} 

正如我設計了的extern開發者,我需要的CustomModule->exec()先運行一個插件/模塊系統,我不想離開它直到開發者不得不打電話給base->exec($str)

我希望CustomModule::exec()在調用Randomizer::exec()之前自動調用,而不必將代碼放在Randomizer::exec()中。這可能與魔術功能有關嗎?

回答

2

如果你的對象需要一些初始化,然後才能「放開*成應用程序的其餘部分,那麼就意味着你需要這樣的工廠。這是怎麼你應該解決它,如果你只需要調用一次方法

如果這樣的執行發生在每次調用exec()方法,那麼你應該使用某種遏制方式(以裝飾器的形式或只是你標準物體組成)

基本上,你需要重組你的碼。

+0

是的,我知道,根據我上一篇文章。很混亂,有點瘋狂。需要睡眠的標誌。謝謝 – IEnumerable 2012-04-25 06:15:11

3

在我看來,我會用這樣的方式: 與其說_ 在隨機數發生器的EXEC構建的,你可以在隨機數發生器定義構造函數和調用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); 
} 

}

+0

「而不是在Randomizer的exec中調用_construct ..」我沒有在樣本的__construct()中編寫代碼。但謝謝你的提示。我修理我的樣品。歡呼聲 – IEnumerable 2012-04-25 06:03:42

+1

好的,祝你好運:-) – Tobi 2012-04-25 06:06:55

2

多一點思考,我意識到這是糟糕的設計。我必須保持代碼基礎的簡單和可擴展性,這隻會讓大型項目陷入混亂。

因爲唯一調用Randomizer :: exec()的程序是我內部構建的程序,所以我可以在前一行調用CustomModule :: exec()並獲得一個布爾響應來查看它是否應該繼續到下一行。

對不起不得不結束這個Q」短