radutopala / mnapoli-php-di
PHP-DI是一个容器,它使得在PHP中实现依赖注入尽可能实用。
3.0.5
2013-06-11 09:46 UTC
Requires
- php: >=5.3.0
- doctrine/annotations: 1.*
- doctrine/cache: 1.*
- myclabs/php-enum: 1.*
- symfony/yaml: 2.*
This package is not auto-updated.
Last update: 2024-09-23 14:18:22 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做一些事情
- Foo调用Bar
这是控制反转(IoC)的模式。依赖控制是从被调用者到调用者的反转。
主要优点:调用链的末尾总是你。因此,你可以控制每个依赖项:你对应用程序的工作方式有完全的控制权。你可以用另一个依赖项替换一个依赖项(例如,你创建的依赖项)。
例如,如果库X使用日志记录器Y,而你又想让它使用你的日志记录器Z,这可能不会那么容易。
使用PHP-DI的代码是如何工作的
现在,使用PHP-DI的代码是如何工作的
- 应用程序需要Foo,所以
- 应用程序从容器中获取Foo,所以
- 容器创建Bim
- 容器创建Bar并将其给予Bim
- 容器创建Foo并将其给予Bar
- 应用程序调用Foo
- Foo调用Bar
- Bar做一些事情
- Foo调用Bar
简而言之,PHP-DI 取消了创建和注入依赖项的所有工作。