当前位置:网站首页>一文搞懂│php 中的 DI 依赖注入
一文搞懂│php 中的 DI 依赖注入
2022-08-02 16:52:00 【51CTO】
目录
什么是 DI / 依赖注入
依赖注入DI
其实本质上是指对类的依赖通过构造器完成自动注入
- 通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要
借助另一个类
的才能完成的 - 最直接的标志就是传参数据为对象的时候。严格来说,你
想在一个类中操作另一个类
,这两个类之间形成了相互依赖关系,传参的方式叫注入
依赖注入出现的原因
- 在未使用依赖注入的时候,
php
需要在一个类中使用另一个类的时候,往往都会进行如下操作 - 比如我在
container
类中需要用到adapter
类,就需要在使用之前进行实例化 - 如果需要用到大量的外部类,这就会造成了
耦合度太高
,很容易造成后期的维护困难
- 通俗的来讲,也就是
container
脱离不了外部类去工作,这就叫耦合度太高
简单的依赖注入
- 上面的代码耦合度太高,导致了
依赖注入
的出现,主要是为了解耦合
- 如下案例,我们只需要将所需要操作的类对象传入即可
依赖注入
操作的参数是对象
,而不是普通参数,是不是有更好的理解了- 但是这样的简单依赖注入,会造成如果你依赖的类很多,你传参的时候会很长,容易
混乱
高阶的依赖注入
- 为了解决上面
参数混乱
的问题,这时候,依赖注入进行了优化
通过魔术方法,__get
去设置对象 - 这时候,我们就可以解决依赖太多,参数混乱的问题了
依赖注入的应用
- 我们先定义一个
容器类
,主要用来向容器中注入
你想要操作的类 - 使用的时候,只需要传容器这一个
对象
即可
依赖注入高阶优化
- 在上面的应用中,我们
直接
将实例化后的对象注入容器中 - 这样会导致,所有的对象还没有被使用就会被实例化一遍,造成
资源的损耗
- 我们可以
传入闭包
,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少服务器资源的损耗
了
边栏推荐
猜你喜欢
VMware启动报错:另一个程序已锁定文件的一部分,进程无法访问(删除最近的.lck文件夹)
小心 transmittable-thread-local 的这个坑
npm install报gyp info it worked if it ends with ok
【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十)
NAACL 2022 | 具有元重加权的鲁棒自增强命名实体识别技术
Oracle 11 g rac finished patch, dbca new patches of SQL database also needs to perform?
1.NVIDIA Deepstream开发指南中文版--欢迎使用 DeepStream 文档
navicat creates a connection 2002-can't connect to server on localhost (10061) and the mysql service has started the problem
2.NVIDIA Deepstream开发指南中文版--自述文件
什么是实时流引擎?
随机推荐
Red and blue against experience sharing: CS from kill posture
蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
Flink SQL builds real-time data warehouse DWD layer
Informatica旗下PowerCenter的元数据库解析
持续交付(一)JenkinsAPI接口调用
MySQL常见函数
NoSQL之redis缓存雪崩、穿透、击穿概念解决办法
[C Language Brush Questions] Three Questions for Getting Started with Pointers | String Length, String Copy, Two Number Swap
golang 计算器实现
Nacos interview questions
NAACL 2022 | 具有元重加权的鲁棒自增强命名实体识别技术
JS数组删除其中一个元素
1.NVIDIA Deepstream开发指南中文版--欢迎使用 DeepStream 文档
总结:不同语言比较总结
3.NVIDIA Deepstream开发指南中文版--Deepstream 环境配置
MYSQL下载及安装完整教程
Navicat premium download and install 15 detailed tutorial
MYSQL一站式学习,看完即学完
Five speakers: seventy genius_platform software platform development 】 【 turn YUY2 RGB24 implementation source code
Real-time data warehouse architecture evolution and selection