依赖注入(Dependency Injection,DI)是一种设计模式,它旨在减少类之间的耦合,提高代码的可测试性和可维护性。在依赖注入模式中,依赖关系不是在类内部创建或者硬编码,而是通过外部传递依赖对象。

有三种主要的依赖注入方式:构造函数注入、方法注入和属性注入。下面是一个简单的 PHP 依赖注入模式的示例,使用了构造函数注入:
// 服务接口
interface Logger {
    public function log($message);
}

// 具体的服务类
class FileLogger implements Logger {
    private $filename;

    public function __construct($filename) {
        $this->filename = $filename;
    }

    public function log($message) {
        file_put_contents($this->filename, $message . PHP_EOL, FILE_APPEND);
    }
}

// 主要业务类,依赖于Logger接口
class Service {
    private $logger;

    // 构造函数注入
    public function __construct(Logger $logger) {
        $this->logger = $logger;
    }

    public function doSomething() {
        // 业务逻辑...
        $this->logger->log('Doing something important');
    }
}

// 客户端代码
$logger = new FileLogger('log.txt'); // 创建具体的服务类实例
$service = new Service($logger); // 构造函数注入
$service->doSomething();

在上述例子中,Logger 是一个服务接口,FileLogger 是具体的服务类实现。Service 类是主要的业务类,它通过构造函数注入一个实现了 Logger 接口的对象。

通过依赖注入,Service 类不需要关心具体的日志实现,而是依赖于一个实现了 Logger 接口的对象。这样的设计模式有助于提高代码的可维护性和可测试性,因为我们可以轻松地替换或者模拟依赖对象进行测试。


转载请注明出处:http://www.zyzy.cn/article/detail/11945/PHP