如何使PHP库松散耦合?

时间:2013-04-20 08:03:49

标签: php oop language-agnostic

我的'框架'中有一些库,如路由,配置,记录器......我希望它们彼此独立,就像一些众所周知的PHP框架一样。

我理解松散耦合的所有原理,但我不知道如何遵循松散耦合和DRY原则。如果我创建配置和记录器的路由库,那么我不重复自己,但如果我想自己使用路由器它将无法正常工作。同样,如果我将日志记录和配置代码写入我的路由库,我会重复自己。

1 个答案:

答案 0 :(得分:3)

松散耦合通常意味着您的组件不期望具体实例,而只需要一个具有兼容接口的实例。

每个协作者可以使用相同类型的不同协作者进行替换。代码不再依赖于其中一个的具体实现。

所以:

  • 请勿使用:

    • 全局(静态)函数

      Foo:bar();
      
    • 基于类的编程(传递类名)

      stream_wrapper_register("var", "VariableStream");
      
    • 全局常量

      if ( !defined('ABSPATH') )   
          define('ABSPATH', dirname(__FILE__) . '/');
      
  • 可是:

    • 使用对象

      $foo->bar();
      
    • 针对接口的程序

      public function __construct(LoggerInterface $logger) {
      
    • 使用模拟进行单元测试

      $logger = $this->getMock('LoggerInterface', array('log'));
      

参见: