当前位置:网站首页>一文搞懂│php 中的 DI 依赖注入
一文搞懂│php 中的 DI 依赖注入
2022-08-02 16:52:00 【51CTO】
目录
什么是 DI / 依赖注入
依赖注入DI其实本质上是指对类的依赖通过构造器完成自动注入- 通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要
借助另一个类的才能完成的 - 最直接的标志就是传参数据为对象的时候。严格来说,你
想在一个类中操作另一个类,这两个类之间形成了相互依赖关系,传参的方式叫注入
依赖注入出现的原因
- 在未使用依赖注入的时候,
php需要在一个类中使用另一个类的时候,往往都会进行如下操作 - 比如我在
container类中需要用到adapter类,就需要在使用之前进行实例化 - 如果需要用到大量的外部类,这就会造成了
耦合度太高,很容易造成后期的维护困难 - 通俗的来讲,也就是
container脱离不了外部类去工作,这就叫耦合度太高
简单的依赖注入
- 上面的代码耦合度太高,导致了
依赖注入的出现,主要是为了解耦合 - 如下案例,我们只需要将所需要操作的类对象传入即可
依赖注入操作的参数是对象,而不是普通参数,是不是有更好的理解了- 但是这样的简单依赖注入,会造成如果你依赖的类很多,你传参的时候会很长,容易
混乱
高阶的依赖注入
- 为了解决上面
参数混乱的问题,这时候,依赖注入进行了优化
通过魔术方法,__get去设置对象 - 这时候,我们就可以解决依赖太多,参数混乱的问题了
依赖注入的应用
- 我们先定义一个
容器类,主要用来向容器中注入你想要操作的类 - 使用的时候,只需要传容器这一个
对象即可
依赖注入高阶优化
- 在上面的应用中,我们
直接将实例化后的对象注入容器中 - 这样会导致,所有的对象还没有被使用就会被实例化一遍,造成
资源的损耗 - 我们可以
传入闭包,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少服务器资源的损耗了
边栏推荐
- 红蓝对抗经验分享:CS免杀姿势
- Common software silent installation parameters
- LeetCode·76.最小覆盖子串·滑动窗口
- 莱斯大学胡侠团队 ICML 2022 杰出论文: 新型图数据增强方法 G-Mixup|附作者对话
- golang源码分析(12)martini源码分析
- Numpy those things
- 锁定和并发控制(二)
- Navicat for mysql破解版安装
- Flink SQL builds real-time data warehouse DWD layer
- Detailed explanation of the principle of JWT_The principle of electromagnetic induction
猜你喜欢

Numpy那些事

尚硅谷尚品项目汇笔记(三)
![[C Language Brush Questions] Three Questions for Getting Started with Pointers | String Length, String Copy, Two Number Swap](/img/40/0bf9f887051954131b346ece0765d4.png)
[C Language Brush Questions] Three Questions for Getting Started with Pointers | String Length, String Copy, Two Number Swap

【电子器件笔记7】MOS管参数和选型

js添加元素,去重,排序

持续集成(三)Jenkins新增节点

Switch 块、Switch 表达式、Switch 模式匹配,越来越好用的 Switch

融云「 IM 进阶实战高手课」系列直播上线

【电子器件笔记6】三极管(BJT)参数和选型

SQL Statement Basics
随机推荐
Numpy那些事
【无标题】
npm install报错Fix the upstream dependency conflict, or retry
Informatica旗下PowerCenter的元数据库解析
[300+ selected big factory interview questions continue to share] Big data operation and maintenance sharp knife interview questions column (10)
Five speakers: seventy genius_platform software platform development 】 【 turn YUY2 RGB24 implementation source code
时间戳格式化「建议收藏」
蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
Kubernetes:(七)优化大法(江湖失传已久的武林秘籍)
navicat premium 15 下载安装详细教程
In the idea to create a web project _idea deployment of the web project
在idea中创建web项目_idea部署web项目
What is an APS system?What should I pay attention to when importing APS?Worth watching again and again
Kubernetes:(六)Pod重启策略和状态解释
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
融云「 IM 进阶实战高手课」系列直播上线
Mysql开启binlog
领导无线边缘AI的联合神经形态学习,具有较高的识别精度以及较低的能耗
JWT原理详解_电磁感应现象原理
MySQL常见函数