PHP如何实现依赖注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP如何实现依赖注入相关的知识,希望对你有一定的参考价值。

参考技术A

网上都有现成的代码。我就随便写一个吧

运行结果

PHP实现依赖注入



###首先,我们来看一段代码:


初始,我们都使用new 的方式在内部进行,EchoT类严重依赖于类A。每当类A变化时,EchoT类也得进行变化。 ###我们优化一下代码

PHP实现依赖注入

可以看到,这样做的话。很大程序上,我们对程序进行了解耦。类A无论你如何变动,EchoT类是不需要变动的。不再依赖于A。但是新问题又来了,我们现在只有A,万一来了B,来了CDEFG怎么办。 ###面向接口

PHP实现依赖注入

将T抽象出为接口,这样,EchoT类中的echo方法变成一个抽象的方法,不到运行那一刻,不知道他们的Method方式是怎么实现的。 ###工厂

PHP实现依赖注入


T要使用哪个是不明确的,因此,我们可以将其工厂化。【看上去很简单,在DI实际上有体现】

###DI(重点来了) 首先,我们看一下PHP的psr规范。

http://www.php-fig.org/psr/psr-11/

官方定义的接口

PHP实现依赖注入


仔细看上面的工厂,是不是和get($id)很一致,PHP官方将其定义为容器(Container,我个人理解,就是一个复杂的工厂)

dependency injection container

依赖注入容器

PHP实现依赖注入

PHP实现依赖注入

PHP实现依赖注入


####使用示例

PHP实现依赖注入


这个时候,会出现一个问题:


####针对接口 下面是alias方法

就此,一个简单的PHP容器就实现了。 ###个人实现代码


以上是关于PHP如何实现依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

DCI:如何使用依赖注入实现上下文?

如何把对象手动注入Spring容器并实现依赖注入

如何将依赖项注入实现接口的类中?

Spring 依赖注入原理

如何调整我的视图模型以实现依赖注入 swiftui(用于以后的单元测试)

ASP.NET Core依赖注入高级玩法——如何注入多个服务实现类