radutopala/mnapoli-php-di

PHP-DI是一个容器,它使得在PHP中实现依赖注入尽可能实用。

3.0.5 2013-06-11 09:46 UTC

README

PHP-DI是一个容器,它尽可能地将依赖注入实现得更加实用。

PHP-DI还试图避免陷入“服务定位器”反模式的陷阱,并帮助你进行真正的依赖注入。

功能

  • 易于入门
  • 支持不同的配置选项,以满足每个人的需求
    • 反射:零配置,智能猜测
    • 注解:现代、实用且简单
    • PHP代码:如果你喜欢完全控制并自动完成
    • PHP数组:允许你将其存储在配置文件中
    • YAML:优雅且简洁
    • XML(进行中):更详细,但更经典
  • 性能:支持大量缓存
  • 提供惰性注入:依赖的惰性加载(进行中)
  • 支持构造函数注入、setter注入和属性注入

用法

让我们去入门指南

并且有一份完整的文档等待着你。

什么是依赖注入,以及为什么使用PHP-DI

您首先可以阅读使用示例介绍依赖注入

依赖注入和DI容器是两个不同的概念,只有在它使事情更实用的情况下才应该使用容器(这并不总是取决于你使用的容器)。

PHP-DI正是关于这一点:使依赖注入更加实用。

经典PHP代码是如何工作的

以下是未使用DI的代码的大致工作方式

  • 应用程序需要Foo(例如,一个控制器),所以
  • 应用程序创建Foo
  • 应用程序调用Foo
    • Foo需要Bar(例如,一个服务),所以
    • Foo创建Bar
    • Foo调用Bar
      • Bar需要Bim(一个服务、一个存储库等),所以
      • Bar创建Bim
      • Bar做一些事情

依赖注入是如何工作的

以下是使用DI的代码的大致工作方式

  • 应用程序需要Foo,它需要Bar,Bar需要Bim,所以
  • 应用程序创建Bim
  • 应用程序创建Bar并将其给予Bim
  • 应用程序创建Foo并将其给予Bar
  • 应用程序调用Foo
    • Foo调用Bar
      • Bar做一些事情

这是控制反转(IoC)的模式。依赖控制是从被调用者到调用者的反转。

主要优点:调用链的末尾总是。因此,你可以控制每个依赖项:你对应用程序的工作方式有完全的控制权。你可以用另一个依赖项替换一个依赖项(例如,你创建的依赖项)。

例如,如果库X使用日志记录器Y,而你又想让它使用你的日志记录器Z,这可能不会那么容易。

使用PHP-DI的代码是如何工作的

现在,使用PHP-DI的代码是如何工作的

  • 应用程序需要Foo,所以
  • 应用程序从容器中获取Foo,所以
    • 容器创建Bim
    • 容器创建Bar并将其给予Bim
    • 容器创建Foo并将其给予Bar
  • 应用程序调用Foo
    • Foo调用Bar
      • Bar做一些事情

简而言之,PHP-DI 取消了创建和注入依赖项的所有工作。