在 PHP 中手动创建/使用 DI 容器


Manually create/use a DI container in PHP?

我正在尝试了解如何使用 DI 容器。

假设我有三个类:A、B 和 C 定义如下:

class A {}
class B
{
    private $a;
    public function set_a(A $a)
    {
        $this->a = $a;
    }
}
class C
{
    private $b;
    public function set_b(B $b)
    {
        $this->b = $b;
    }
}

现在我没有得到的是我应该在索引中写什么.php。我已经读到实例化容器然后将其传递给我的对象以便他们可以使用它并不是一件好事,因为它使我的对象依赖于容器。但是,这是否意味着我必须在索引中写这样的东西.php :

$container = new Container();
$container->a = function($ctnr) {
    return new A();
}
$container->b = function($ctnr) {
    $b = new B();
    $b->set_a($ctnr->a);
    return $b;
}
$container->b = function($ctnr) {
    $c = new C();
    $c->set_b($ctnr->b);
    return $c;
}
$c = $container->c;

这是要走的路吗?

关于容器的整个思想是解析依赖关系并执行对象的初始化。

我会做的:选择您的容器。为了好玩,我写了一个,它被用于几个应用程序。(https://github.com/niclaslindberg/webx-ioc/)。使用接口设计依赖项。(仅允许类依赖于其他接口)。注册您的类/实例并让容器完成所有繁琐的工作。

我想你理解了这个概念。

依赖注入的基本思想是将对象的实例化委托给框架。

您可以编写自己的容器,但我建议您使用框架。

大多数框架允许您决定应注入哪些类型和位置。

Symfony是一个非常好的容器。