2013-01-07 62 views
0

在PHP中使用靜態類/方法時,我不確定如何執行以下操作。這段代碼不會運行,但應該讓你知道我想要做什麼。在PHP中,如何引用另一個類的靜態變量中的類

 
class Accounts { 
    static public $emailer = Site_Emailer; 
    static function add($id) { 
     self::$emailer::send('New account created'); 
    } 
} 

然後在單元測試,我想測試,調用該方法將發送一封電子郵件:

 
function testAccountsAddEmails() { 

    Accounts::$email = Mock_Emailer; 
    Accounts::add(1); 

    $this->assertTrue(count(Mock_Emailer::$sent) === 1); 
} 

我遇到的問題是帳戶$emailer不能只是保持靜態變量該類,我可以擁有一個類名字符串,然後使用call_user_func(),但似乎有點混亂。

我希望澄清我遇到的問題,讓我知道是否需要更多筆記!

感謝

+0

您的問題基本上是否正確:「如何將對象存儲在PHP中的靜態變量中?」 – Frog

+1

爲什麼他們必須是靜態的?但我喜歡你嘗試單元測試。這就像確保一個破碎的引擎是可靠的 – MikeSW

+0

@Frog不,我想引用一個類,而不是在對象 –

回答

4
class Accounts { 
    static public $emailer = 'Site_Emailer'; // String representation of class name 
    static function add($id) { 
     call_user_func(
      array(self::$emailer, 'send'), 
      'New account created' 
     ); 
    } 
} 

同樣,你必須使用字符串,而在你的測試用例將其分配給變量:

Accounts::$email = 'Mock_Emailer`; 

但考慮使用實物和依賴注入。

+0

好吧,這很有意義,因爲我的「帳戶」基本上是一個副本,在這種情況下,單身是一種有效的方法嗎? –

相關問題