0

PHPで静的クラス/メソッドを使用する場合、次のことを行う方法がわかりません。このコードは実行されませんが、何をしたいのかがわかります。

クラス アカウント {
   static public $emailer = Site_Emailer;
   静的関数 add( $id ) {
       self::$emailer::send( '新しいアカウントが作成されました' );
   }
}

次に、単体テストで、このメソッドを呼び出すとメールが送信されることをテストします。

関数 testAccountsAddEmails() {

    アカウント::$email = Mock_Emailer;
    アカウント::add( 1 );

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

私が直面している問題は、アカウントの静的変数が$emailerクラスを保持するだけでなく、クラス名の文字列を保持してから使用することもできますcall_user_func()が、それはやや面倒です。

私が抱えている問題が明確になることを願っています。さらにメモが必要な場合はお知らせください。

ありがとう

4

1 に答える 1

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`; 

ただし、実際のオブジェクトと依存性注入の使用を検討してください。

于 2013-01-07T18:23:42.637 に答える