如何处理常量和依赖注入

时间:2015-10-22 11:59:01

标签: php dependency-injection

  

更新我的问题可能比下面解释的更简单:在使用依赖注入时,我不应该使用其他类中的常量吗?

我正在转换许多类以注入其依赖项,而不是在类中定义它们。到目前为止一切都很好。

但是,我有一些常量,特别是与事件调度系统有关,我不确定该怎么做。

例如:

const STORAGE_SYSTEM_FLUSHED = MyDatabaseEvents::FLUSHED;

public function myFunctionForSO() {
    $this->ed->addListener(self::STORAGE_SYSTEM_FLUSHED, function() {
        // do some stuff
    });
}

MyDatabaseEvents::FLUSHED只是一个用于标识事件的字符串,通常是"services.database.flush"的内容,但我的方法会导致我的类依赖于MyDataBaseEvents等类。< / p>

仅为此字符串注入对象感觉有点过分。这通常如何处理?

1)注入全局设置类?

2)注入全局事件identfier类?

3)由调用类配置?

4)......?

2 个答案:

答案 0 :(得分:-1)

如果你需要的只是一个字符串,那么只传递字符串。尽量避免让你的类依赖于复杂的结构/对象如果你的构造函数太复杂(参数太多)你可以尝试使用类似构建器模式的东西来收集所有参数并创建一个对象。

答案 1 :(得分:-1)

你可以在DI中使用常量

考虑一下

class A{
  const XMLWALLSTATUS = 'TRUE';
  public function __construct()
  {
  }
}


class B{
  protected $avalue;
  public function __construct(A $avalue)
  {
    $this->avalue = $avalue
  }
  public function getFoo(){
    return $this->avalue::XMLWALLSTATUS;
  }
}

希望这有帮助