【问题标题】:Dependency Injection in PHP 5.3PHP 5.3 中的依赖注入
【发布时间】:2023-03-28 09:16:01
【问题描述】:

我正在尝试整理一个应用程序,并且已经手动进行了一段时间的构造函数依赖注入。

这有点乏味,我想开始使用依赖注入容器。

我正在寻找一个积极开发和维护的 DI 容器。我发现 Crafty 作为替代方案,它可以将依赖项与 XML、YAML、数组或以编程方式连接在一起。

DI 容器不应与成熟的框架紧密耦合,我们正在寻找简单且可插拔的东西,尽可能减少麻烦。

是否有人提出建议以及您选择特定实施的原因?感谢阅读。

【问题讨论】:

  • 将其作为评论发布,因为我没有这方面的经验,但我知道 Symfony 依赖注入库。它应该与框架的其余部分分离,并且看起来非常灵活。在这里查看components.symfony-project.org/dependency-injection
  • @alexn - +1,我使用 Symfony 库,我是忠实粉丝;我们正在升级一个包含大量全局变量/单例的旧项目,并转而使用 Symfony 库来尝试清理内容,这对我们很有帮助。

标签: php dependency-injection


【解决方案1】:

由于人们似乎喜欢我的评论,因此我将其发布为答案。我没有这方面的经验,但我知道 Symfony 依赖注入库。它应该与框架的其余部分分离,并且看起来非常灵活。查看Symfony Components

我也觉得Substrate 看起来不错。据作者介绍,它也有制作经验,一直都不错。

【讨论】:

  • +1 Symfony DI 容器是一个不错的选择,我们在大型项目中使用它
  • Symfony DIC 是一种快速灵活的选择,而且它还拥有一流的文档。
【解决方案2】:

Bucket 似乎很符合您的要求。

【讨论】:

    【解决方案3】:

    您也可以查看PHP-DI,它通过注解 (@Inject) 和最小配置 进行依赖注入。 p>

    它非常易于使用,并且与 Zend Framework 集成得非常好(如果您曾经使用过它)。

    (免责声明:我确实在这个框架上工作)

    【讨论】:

    • 使用注解来配置依赖注入容器是有史以来最荒谬的事情。 DIC 的存在是为了将依赖关系解析规则与应用程序代码分开。注释然后将此责任放回应用程序代码中。有关更多信息,请参阅r.je/php-annotations-are-an-abomination.html(n.b 我写了这篇文章)
    • “依赖解析规则”不在应用程序代码中,它们在配置中。让我重复一遍:注解不会配置 DI。他们只是标记要注入的属性/设置器,但依赖项的选择会退回到 DIC 配置。而且我正在开发 PHP-DI 的 V3.0,它使注释成为可选的顺便说一句。另一个例子看Spring的注解blogs.sourceallies.com/2011/08/…
    • 而注解只是一个元数据源,是 XML 或 YAML 文件的替代品,就像 Doctrine 的 ORM 映射一样。
    • 但它们是特定于类的。它们本质上是硬编码的。 Spring 示例非常完美:@Resource(name="person")。这会强制依赖项使用名为“person”的实例,并且此依赖项是特定于类的。您自己的 PHP-DI 会因此受到影响。使用 DbAdapter 的名为“Foo”的示例:无法创建两个使用不同 DbAdapter 实例的“Foo”实例。从本质上讲,一切都相当于是静态的,一个在类的每个实例之间共享的静态属性。
    • @TomB 您在这种情况下是非常正确的,但是您选择了一个不应该被滥用的特定功能(就像全局变量一样)。这不是使用这些框架的主要/标准方式,对于 PHP-DI 或 Spring 也是如此。就像 PHP 有全局变量一样,这并不会让 PHP 变得糟糕。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多