Php 如何正确使用依赖注入?因为使用注入类的方法会创建新的依赖关系
我是一个自学成才的人,试图成为一名优秀的PHP开发人员,并希望完全理解依赖注入 我理解广义的原则,理论上依赖注入使我的类与其他类没有紧密耦合的依赖关系 但我不明白如何在实践中完全实现这一点 使用PHP联盟容器和示例控制器的示例:Php 如何正确使用依赖注入?因为使用注入类的方法会创建新的依赖关系,php,dependency-injection,dependency-management,Php,Dependency Injection,Dependency Management,我是一个自学成才的人,试图成为一名优秀的PHP开发人员,并希望完全理解依赖注入 我理解广义的原则,理论上依赖注入使我的类与其他类没有紧密耦合的依赖关系 但我不明白如何在实践中完全实现这一点 使用PHP联盟容器和示例控制器的示例: /*************************************************************************************** * DI Container setup ***********************
/***************************************************************************************
* DI Container setup
***************************************************************************************/
$container = new Container();
/***************************************************************************************
* Register Service Providers
***************************************************************************************/
$container->addServiceProvider(new \App\Providers\ConfigProvider);
/***************************************************************************************
* Register Container Class Dependencies
***************************************************************************************/
$container->share('App\Http\Controller')
->withArguments(['config']);
现在在我的控制器中,我将收到如下注入的依赖项:
class Controller
{
public $config;
function __construct($config)
{
$this->config = $config;
}
function index()
{
$newConfigItem = 'domain.com';
$configDomain = $this->config->setConfig($newConfigItem);
}
}
控制器只是一个例子,它可以是任何类,任何类型的类,比如服务提供者、中间件等
这是一个关于正确处理依赖注入的一般性问题。
使用注入的Config类的setConfig()方法是否会创建新的紧密耦合依赖项?
即使我将使用容器来创建一个新对象,在任何类中直接使用容器只是创建了一个对容器方法的依赖,该容器方法用于注册/扩展容器中的对象
或者我需要一个额外的PHP类层,它以某种方式包装我的依赖项以使用新的方法名称,但即使如此,如果我需要切换使用的库/包/组件,这个额外的PHP类层也有需要调整的依赖项
我的想法哪里出错了?我想你选择了一个配置不好的例子。我喜欢认为配置是不可变的。我不是专家,但我尽量不传递容器,我提前很早就使用了它。我提到过这是一个例子,问题的目标是DI的原理,而不是特定的代码。但是你会如何使用容器中对象的方法,在其他需要它们的课程中?:)需要依赖关系的对象已将它们传递给它们。对象具有声明的依赖项,它们不会从容器中获取它们。