一文搞懂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)其它相关文章!

<!--

-->

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

我要提问

相关标签:

php 闭包 对象

来源:编程网网

一文搞懂PHP中的DI依赖注入-每日运维
收藏

一文搞懂PHP中的DI依赖注入-每日运维
点赞

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

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

一文搞懂PHP中的DI依赖注入-每日运维
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维2
186

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维2
249

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
198

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
137

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
173

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
122

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
199

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维2
248

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
186

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

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

一文搞懂PHP中的DI依赖注入-每日运维0
一文搞懂PHP中的DI依赖注入-每日运维1
167

相关专题
更多>

  • 一文搞懂PHP中的DI依赖注入-每日运维
    php文件怎么打开
  • 一文搞懂PHP中的DI依赖注入-每日运维
    php怎么取出数组的前几个元素
  • 一文搞懂PHP中的DI依赖注入-每日运维
    php反序列化失败怎么办
  • 一文搞懂PHP中的DI依赖注入-每日运维
    php怎么连接mssql数据库
  • 一文搞懂PHP中的DI依赖注入-每日运维
    php连接mssql数据库的方法
  • 一文搞懂PHP中的DI依赖注入-每日运维
    html怎么上传
  • 一文搞懂PHP中的DI依赖注入-每日运维
    PHP出现乱码怎么解决
  • 一文搞懂PHP中的DI依赖注入-每日运维
    php怎么在浏览器运行