什么是 php DI 依赖注入?原因?
什么是DI/依赖注入
依赖注入DI
其实就是通过构造函数完成对类的依赖,就是自动注入你当前有一个类。但该类的一些方法或功能不能由该类单独执行,而是可以由另一个类来执行
- 最直接的指示就是参数信息是针对何时传递的。严格来说
你想在一个班级中使用另一个班级
。这两个类之间存在相互依赖的关系。传递参数的方法就叫注入
?出现依赖注入的原因
- 当不使用依赖注入时,
php
当你必须用一个类来使用另一个类时,你经常会做以下操作 - 比如我是在类
容器
中,如果要使用类适配器
类,则需要在使用前实例化它。耦合度太高
,容易造成后期维护问题
- 通俗地说,就是
❀没有外部类无法工作。这就是所谓的
是不是耦合太高了
<?php
class container
{
private $adapter;
public function __construct()
{
$this->adapter = new adapter();
}
}
?简单的依赖添加
- 上面的代码耦合性太强,导致了
依赖添加
,主要是下面这种情况下的解耦
- 。必须使用的类对象。即
依赖注入
函数的参数是Objects
而不是通常的参数。有没有更好的理解?- 但是这种简单的依赖注入导致如果你依赖的类很多,给参数的时候又很长,很容易
混淆
<?php
class container
{
private $adapter;
public function __construct(adapter $adapter)
{
$this->adapter = $adapter;
}
}
?高级依赖注入
- 为了解决上面的
参数混乱
问题,目前对依赖注入进行了优化
通过 magic 方法,_ 设置对象 - 目前,我们能解决依赖太多、参数混乱的问题吗
<?php
class container
{
public $instance = [];
public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}
$container = new container();
$container->adapter = new adapter();
$container->autofelix = new autofelix();
?依赖注入应用
- 首先我们定义
容器类
,主要用于注入
到你要使用的类。要使用它,你所要做的就是传递容器对象就是这样
<?php
class container
{
public $instance = [];
public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}
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); //我是调度器
?依赖添加的高级优化
- 在上面的应用中,
直接将
个物体注入到水箱 - 中。这会导致所有对象在使用之前就被实例化,从而导致
资源的损失。损失
- 我们可以
绕过百叶窗
以防止物体显现和喷洒。当你想使用它时,再次实例化它,这样可以减少服务器资源。损失
<?php
$container = new container();
$container->adapter = new adapter();
//高阶优化
$container = new container();
$container->adapter = function () {
return new adapter();
};
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。