Php 如何正确使用依赖注入?因为使用注入类的方法会创建新的依赖关系

Php 如何正确使用依赖注入?因为使用注入类的方法会创建新的依赖关系,php,dependency-injection,dependency-management,Php,Dependency Injection,Dependency Management,我是一个自学成才的人,试图成为一名优秀的PHP开发人员,并希望完全理解依赖注入 我理解广义的原则,理论上依赖注入使我的类与其他类没有紧密耦合的依赖关系 但我不明白如何在实践中完全实现这一点 使用PHP联盟容器和示例控制器的示例: /*************************************************************************************** * DI Container setup ***********************

我是一个自学成才的人,试图成为一名优秀的PHP开发人员,并希望完全理解依赖注入

我理解广义的原则,理论上依赖注入使我的类与其他类没有紧密耦合的依赖关系

但我不明白如何在实践中完全实现这一点

使用PHP联盟容器和示例控制器的示例:

/***************************************************************************************
 * 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的原理,而不是特定的代码。但是你会如何使用容器中对象的方法,在其他需要它们的课程中?:)需要依赖关系的对象已将它们传递给它们。对象具有声明的依赖项,它们不会从容器中获取它们。