依赖注入(DI)

2024-03-08  本文已影响0人  该死的金箍

依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于解耦组件之间的依赖关系。在传统的程序设计中,组件通常会直接创建和管理它们所依赖的对象,这会导致组件之间的紧耦合,使得代码难以测试、修改和维护。而使用依赖注入可以通过将组件的依赖项从组件内部移到外部管理,从而解耦组件之间的关系。

在依赖注入中,组件不再负责创建或管理它们所依赖的对象,而是通过外部的方式将依赖项注入到组件中。这样做有几个优点:

松耦合:依赖注入使得组件之间的依赖关系变得松散,从而使得代码更易于理解、修改和维护。

可测试性:由于依赖项是通过参数传递或者其他外部方式注入的,因此可以轻松地替换依赖项,从而方便进行单元测试和集成测试。

可重用性:依赖注入可以提高组件的可重用性,因为组件不再与特定的实现绑定,而是依赖于抽象接口,从而使得它们可以在不同的上下文中被重用。

依赖注入可以通过构造函数注入、属性注入或者方法注入等方式实现。其中,构造函数注入是最常见的方式,它通过在组件的构造函数中接受依赖项作为参数来实现注入。

高阶用法

/**高阶DI**/

//创建一个容器

class container
{
    public $instance = [];
    public function __set($key, $value)
    {
        $this->instance[$key] = $value;
    }
    //这里是测试__get方法用  注释掉 
    //public function __get($key)
    //{
        // return empty($this->instance[$key]) ? "null" : $this->instance[$key];
    //}
}

class adapter
{
    public $name = '我是调度器';
}
$container = new container();
$container->adapter = new adapter();
class autoFelix
{
    private $container;
    public function __construct(container $container)
    {
        $this->container = $container;
    }
    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autoFelix = new autoFelix($container);
$who = $autoFelix->who('adapter');
var_dump($who);

上一篇下一篇

猜你喜欢

热点阅读