【问题标题】:In PHP, how to reference a class in another class' static variable在 PHP 中,如何在另一个类的静态变量中引用一个类
【发布时间】:2012-12-21 12:21:57
【问题描述】:

在 PHP 中使用静态类/方法时,我不确定如何执行以下操作。此代码不会运行,但应该让您了解我想要做什么。

类帐户{ 静态公共 $emailer = Site_Emailer; 静态函数添加($id){ self::$emailer::send('新帐户创建'); } }

然后在一个单元测试中,我想测试调用这个方法会发送一封邮件:

功能 testAccountsAddEmails() { Accounts::$email = Mock_Emailer; 帐户::add( 1 ); $this->assertTrue(count(Mock_Emailer::$sent) === 1); }

我遇到的问题是 Accounts $emailer 的静态变量不能只保存类,我可以让它保存类名的字符串,然后使用 call_user_func() 但这似乎有些混乱。

我希望能澄清我遇到的问题,如果需要更多说明,请告诉我!

谢谢

【问题讨论】:

  • 您的问题基本上是正确的:“如何在 PHP 中将对象存储在静态变量中?”
  • 为什么它们必须是静态的?但我喜欢你尝试进行单元测试。这就像确保损坏的引擎是可靠的
  • @Frog 不,我想引用一个类,而不是对象
  • @MikeSW 好问题,我想我也可以使用单例方法,对吧?
  • 为什么这个类需要一个实例?仅当您有充分的理由时才使用静态。

标签: php unit-testing


【解决方案1】:
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`; 

但考虑使用真实对象和依赖注入。

【讨论】:

  • 好吧,这是有道理的,因为我的“帐户”本质上是一个副本,在这种情况下,单例是一种有效的方法吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多