依赖注入(DI)
依赖注入(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);