【发布时间】:2021-08-04 01:04:22
【问题描述】:
我总是听说它是硬编码的:
final class Dependency {}
class A
{
private Dependency $dependency;
public function __construct()
{
$this->dependency = new Dependency();
}
}
好的,让我们使用依赖注入:
class A
{
private Dependency $dependency;
public function __construct(Dependency $dependency)
{
$this->dependency = $dependency;
}
}
什么使它变得更好?除了Dependency,我什么都不能通过!
【问题讨论】:
-
想象一下这个依赖有它自己的依赖。然后这些依赖项有它们自己的......你真的想要在一个特定类的构造函数中硬编码整个混乱吗?一旦另一个类具有相同的依赖关系,你想重复它吗?或者您更愿意让一个中心点(服务容器)负责这个实例化,将这些依赖项传递给构造函数?
-
后一个给你向上转换到更通用类型的特权。例如,
Parent p = new Child();是一种优势。 -
或者暗示一个接口,允许你在给定的情况/环境中传递你需要的任何具体实现。
标签: php design-patterns dependency-injection