一文搞懂PHP中的DI依赖注入

目录
  • 什么是 DI / 依赖注入
  • 依赖注入出现的原因
  • 简单的依赖注入
  • 高阶的依赖注入
  • 依赖注入的应用
  • 依赖注入高阶优化

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

什么是 DI / 依赖注入

依赖注入DI 其实本质上是指对类的依赖通过构造器完成 自动注入

通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要 借助另一个类 的才能完成的

最直接的标志就是传参数据为对象的时候。严格来说,你想在一个类中操作另一个类,这两个类之间形成了相互依赖关系,传参的方式叫 注入

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

依赖注入出现的原因

在未使用依赖注入的时候,PHP 需要在一个类中使用另一个类的时候,往往都会进行如下操作

比如我在 container 类中需要用到 adapter 类,就需要在使用之前进行实例化

如果需要用到大量的外部类,这就会造成了 耦合度太高,很容易造成后期的 维护困难

通俗的来讲,也就是 container 脱离不了外部类去工作,这就叫 耦合度太高

adapter = new adapter();
}
}

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

简单的依赖注入

上面的代码耦合度太高,导致了 依赖注入 的出现,主要是为了 解耦合

如下案例,我们只需要将所需要操作的类对象传入即可

依赖注入 操作的参数是 对象,而不是普通参数,是不是有更好的理解了

但是这样的简单依赖注入,会造成如果你依赖的类很多,你传参的时候会很长,容易混乱

adapter = $adapter;
}
}

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

高阶的依赖注入

为了解决上面 参数混乱 的问题,这时候,依赖注入进行了优化

通过魔术方法,__get 去设置对象

这时候,我们就可以解决依赖太多,参数混乱的问题了

instance[$name] = $value;
}
}

$container = new container();

$container->adapter = new adapter();
$container->autofelix = new autofelix();

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

依赖注入的应用

我们先定义一个 容器类,主要用来向容器中 注入 你想要操作的类

使用的时候,只需要传容器这一个 对象 即可

instance[$name] = $value;
}
}

class adapter
{
public $name = '我是调度器';
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
private $container;

public function __construct(container $container)
{
$this->container = $container;
}

public function who($class)
{
return $this->container->instance[$class]->name;
}
}

$autofelix = new autofelix($container);

$who = $autofelix->who('adapter');

var_dump($who); //我是调度器

php小编百草带您深入探讨PHP中的依赖注入(DI)依赖注入是一种软件设计模式,有助于提高代码的灵活性和可维护性。本文将详细介绍DI的概念、原理和在PHP中的实际应用,帮助您更好地理解和运用依赖注入技术。

依赖注入高阶优化

在上面的应用中,我们 直接 将实例化后的对象注入容器中

这样会导致,所有的对象还没有被使用就会被实例化一遍,造成 资源的损耗

我们可以 传入闭包,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少 服务器资源的损耗 了

adapter = new adapter();

//高阶优化
$container = new container();
$container->adapter = function () {
return new adapter();
};

以上就是一文搞懂PHP中的DI依赖注入的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

        <!-- 

            <button type="button">
            没有解决问题?点击使用智能助手
            </button>

         --&gt;

                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231753814.png">

                    智能AI问答
                    每日运维网(www.mryunwei.com)智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。

                我要提问

相关标签:

                    php 闭包 对象                    

                            来源:编程网网

                                        <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754838.png">

收藏

                                        <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">

点赞

上一篇:PHP伪协议基本原理介绍

下一篇:使用 Laravel Passport 处理 API 认证

            <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754546.png">
            本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

            作者最新文章
  • Golang如编程之翼:探索其对现代软件开发的推动作用 2024-04-03 13:15:01
  • Java 语法的陷阱:识别并避免常见错误 2024-04-03 13:10:21
  • 基于Python的免费手机号码归属地查询 2024-04-03 13:10:14
  • Go语言在大数据处理中的作用 2024-04-03 13:09:01
  • Java 语法实战指南:应用理论,解决实际问题 2024-04-03 13:07:19
  • 电脑上免费听音乐的软件 2024-04-03 13:04:07
  • Java 语法秘籍:掌握编程语言的力量 2024-04-03 13:01:25
  • 将U盘中的系统安装到电脑:简易指南 2024-04-03 13:00:20
  • iOS / iPadOS 17.5 Beta更新内容及升级方法 2024-04-03 12:58:16
  • Win11透明任务栏失效怎么办 2024-04-03 12:55:13
            最新问题

                        当我在 localhost 中键入文件夹名称时如何首先显示登录系统的语法
                        不知道语法是什么?我想要发生的是,当我输入localhost/farm-e-mart时,第一个文件应该显示登录系统。我怎样才能做到这一点?

P粉351138462来自于2024-04-02 14:32:52

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">2
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">186

                        在同一页面上的多个位置显示库存计数器
                        这个脚本作为股票倒计时效果很好,但我无法在同一页面上超过1个位置显示它。例如,同一页面上有4或5个产品/计划,每个产品显示的库存数量不同,并且数量变化的时间也不同。仅在1个产品上显...

P粉038161873来自于2024-04-02 14:25:38

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">2
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">249

                        以2位小数显示SQL中的计算结果
                        我编写了一个简单的查询来查找两列的百分比,但我希望结果在只有两位小数的列中。这是我写的,但我遇到了错误,而且我似乎无法修复它。SELECTSmall_Bags,Total_Bags...

P粉055726146来自于2024-04-02 14:23:34

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">198

                        如何根据父元素高度自动调整子元素的上边距?
                        我在一次老的大学考试中遇到了问题。基本上它要求:获取这个json文件[{"colore":"#FF0080","pos_orizz...

P粉086993788来自于2024-04-02 13:49:19

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">137

                        下载作为 api 调用响应的 ZIP 文件
                        我有一个二进制zip文件作为api调用的响应。我想使用Javacript/React直接下载该zip文件。我怎样才能实现这个目标?

P粉034571623来自于2024-04-02 13:56:27

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">173

                        不合作布尔逻辑
                        我的网站遇到了一个问题,至少几周来我一直在努力解决这个问题,所以我希望有人能够指出我哪里出了问题。对于一些背景知识,我是一名应届毕业生,这是我为最终项目构建的顶点项目,在演示之前我...

P粉343141633来自于2024-04-02 13:34:26

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">122

                        LESS string-set 的现代等价物是什么
                        有关字符串集及其用途的示例,请参阅使用LESS字符串集属性和内容方法经过多次困惑,我发现这已经过时了,并且自Chrome版本39以来就没有实现过,尽管它显然在LESS中继续存在。教...

P粉993712159来自于2024-04-02 13:29:36

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">199

                        缺少材质-ui 搜索图标的导入
                        importReactfrom'react'import{Search}from"@material-ui/icons/Search"constApp=()=&amp;...

P粉208469050来自于2024-04-02 13:22:44

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">2
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">248

                        将 SVG 加载为内联并更改填充颜色
                        我这样使用SVG:&lt;imagex=&quot;0&quot;y=&quot;0&quot;width=&quot;40&quot;height=&quot;40&quot;h...

P粉323224129来自于2024-04-02 13:32:42

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">186

                        将 jpg 图像从 mysql 添加到 html
                        作为序言,我对此很陌生,所以这可能是一个愚蠢的问题,但是......我正在尝试设计一个从数据库中提取的网站,我在该数据库中存储了“商店”的产品信息。这是我到目前为止的代码。sess...

P粉511757848来自于2024-04-02 13:27:34

                                  <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754394.png">0
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754405.png">1
                                <img src="https://img.mryunwei.com/uploads/2024/04/20240403231754548.png">167

                相关专题
                更多&gt;
  • php文件怎么打开
  • php怎么取出数组的前几个元素
  • php反序列化失败怎么办
  • php怎么连接mssql数据库
  • php连接mssql数据库的方法
  • html怎么上传
  • PHP出现乱码怎么解决
  • php怎么在浏览器运行