iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >一文搞懂 php 中的 DI 依赖注入
  • 539
分享到

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

PHP依赖注入经验分享开发模式高级编程 2023-09-07 20:09:20 539人浏览 泡泡鱼
摘要

✨ 目录 🎈 什么是 DI / 依赖注入🎈 依赖注入出现的原因🎈 简单的依赖注入🎈 高阶的依赖注入🎈

✨ 目录

🎈 什么是 DI / 依赖注入

  • 依赖注入DI 其实本质上是指对类的依赖通过构造器完成 自动注入
  • 通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要 借助另一个类 的才能完成的
  • 最直接的标志就是传参数据为对象的时候。严格来说,你想在一个类中操作另一个类,这两个类之间形成了相互依赖关系,传参的方式叫 注入

🎈 依赖注入出现的原因

  • 在未使用依赖注入的时候,PHP 需要在一个类中使用另一个类的时候,往往都会进行如下操作
  • 比如我在 container 类中需要用到 adapter 类,就需要在使用之前进行实例化
  • 如果需要用到大量的外部类,这就会造成了 耦合度太高,很容易造成后期的 维护困难
  • 通俗的来讲,也就是 container 脱离不了外部类去工作,这就叫 耦合度太高
phpclass container{    private $adapter;    public function __construct()    {        $this->adapter = new adapter();    }}

🎈 简单的依赖注入

  • 上面的代码耦合度太高,导致了 依赖注入 的出现,主要是为了 解耦合
  • 如下案例,我们只需要将所需要操作的类对象传入即可
  • 依赖注入 操作的参数是 对象,而不是普通参数,是不是有更好的理解了
  • 但是这样的简单依赖注入,会造成如果你依赖的类很多,你传参的时候会很长,容易混乱
class container{    private $adapter;    public function __construct(adapter $adapter)    {        $this->adapter = $adapter;    }}

🎈 高阶的依赖注入

  • 为了解决上面 参数混乱 的问题,这时候,依赖注入进行了优化
    通过魔术方法,__get 去设置对象
  • 这时候,我们就可以解决依赖太多,参数混乱的问题了
class container{    public $instance = [];    public function __set($name, $value)    {        $this->instance[$name] = $value;    }}$container = new container();$container->adapter = new adapter();$container->autofelix = new autofelix();

🎈 依赖注入的应用

  • 我们先定义一个 容器,主要用来向容器中 注入 你想要操作的类
  • 使用的时候,只需要传容器这一个 对象 即可
class container{    public $instance = [];    public function __set($name, $value)    {        $this->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); //我是调度器

🎈 依赖注入高阶优化

  • 在上面的应用中,我们 直接 将实例化后的对象注入容器中
  • 这样会导致,所有的对象还没有被使用就会被实例化一遍,造成 资源的损耗
  • 我们可以 传入闭包,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少 服务器资源的损耗
$container = new container();$container->adapter = new adapter();//高阶优化$container = new container();$container->adapter = function () {    return new adapter();};

来源地址:https://blog.csdn.net/weixin_41635750/article/details/126105128

--结束END--

本文标题: 一文搞懂 php 中的 DI 依赖注入

本文链接: https://www.lsjlt.com/news/399073.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文搞懂PHP中的DI依赖注入
    目录什么是 DI / 依赖注入依赖注入出现的原因简单的依赖注入高阶的依赖注入依赖注入的应用依赖注入高阶优化什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器...
    99+
    2022-11-13
    PHP DI依赖注入 PHP 依赖注入 PHP DI
  • 一文搞懂 php 中的 DI 依赖注入
    ✨ 目录 🎈 什么是 DI / 依赖注入🎈 依赖注入出现的原因🎈 简单的依赖注入🎈 高阶的依赖注入🎈 ...
    99+
    2023-09-07
    PHP 依赖注入 经验分享 开发模式 高级编程
  • 一文带你搞懂Golang依赖注入的设计与实现
    目录依赖注入要解决的问题inject 依赖注入模型/设计injector 的依赖注入实现例子在现代的 web 框架里面,基本都有实现了依赖注入的功能,可以让我们很方便地对应用的依赖进...
    99+
    2023-01-05
    Golang依赖注入实现 Golang依赖注入 Go 依赖注入
  • Spring的DI依赖注入详解
    目录1、什么是DI依赖注入?2、利用 set 方法给属性赋值3、利用 构造函数 给属性赋值总结:1、什么是DI依赖注入? spring动态的向某个对象提供它所需要的其他对象。这一点是...
    99+
    2024-04-02
  • 一文搞懂Spring循环依赖的原理
    目录简介循环依赖实例测试简介 说明 本文用实例来介绍@Autowired解决循环依赖的原理。@Autowired是通过三级缓存来解决循环依赖的。  除了@Autoired,...
    99+
    2024-04-02
  • 一文带你搞懂PHP对象注入
    目录背景漏洞案例PHP类和对象php magic方法php对象序列化序列化magic函数php对象注入常见的注入点其他的利用方法如何利用或者避免这个漏洞结论背景 php对象注入是一个...
    99+
    2024-04-02
  • 一文聊聊Angular中的依赖注入
    译者添加:举个例子 -- 当 classA 使用 classB 的某些功能时,则表示 classA 具有 classB 的依赖。在使用 classA 之前,我们需要创建 classB。推荐文章依赖注入是什么?如何使用它?我们都知道在 Ang...
    99+
    2023-05-14
    前端 JavaScript Angular.js
  • 一文搞懂SQL注入攻击
    目录1. 前言2. SQL注入简介(1)SQL语言(2)SQL注入3. SQL注入步骤(1)发现漏洞(2)信息收集(3)攻击Web系统(猜解用户名和密码)(4)获取管理员权限4. 防范SQL注入(1)使用参数化查询或存储...
    99+
    2023-04-19
    SQL注入攻击 SQL注入
  • Quarkus中的依赖注入DI和面向切面aop编程
    目录前言JSR365:Java2.0的上下文和依赖注规范Bean声明和依赖注入Bean的生命周期条件化初始Bean面向切面编程aopBean列表接口结语前言 做java开发的肯定清楚...
    99+
    2024-04-02
  • ASP.NETCore依赖注入DI容器的方法实现
    目录一、注册服务二、解析依赖三、实现自定义的服务提供程序四、总结ASP.NET Core 是一个跨平台、高性能的框架,它提供了一种依赖注入(DI)容器,用于管理应用程序中的对象和服务...
    99+
    2023-03-19
    ASP.NET Core依赖注入DI ASP.NET Core依赖注入
  • 一文搞懂Java JDBC中的SQL注入问题
    目录SQL注入✨什么是SQL注入✨SQL注入的效果的演示SQL注入代码SQL注入效果✨如何避免SQL注入PrepareStatement解决SQL注入✨PreparedStateme...
    99+
    2022-11-13
    jdbc sql 注入
  • Spring依赖注入(DI)两种方式的示例详解
    目录一、依赖注入方式二、setter注入引用类型简单类型三、构造器注入引用类型简单类型参数适配(了解)四、依赖注入方式选择一、依赖注入方式 思考:向一个类中传递数据的方式有几种? 普...
    99+
    2024-04-02
  • PHP中怎样实现依赖注入
    今天就跟大家聊聊有关PHP中怎样实现依赖注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们来看一段代码:class A{ public functi...
    99+
    2023-06-04
  • PHP控制反转和依赖注入的理解(通俗易懂)
    目录 1.IoC是什么 2.IoC能做什么 3.IoC和DI 4.IoC(控制反转) 5.DI(依赖注入) 6.我对IoC(控制反转)和DI(依赖注入)的理解 学习PHP各个框架的过程中,都会听过IoC(控制反转) 、DI(依赖注入)这两...
    99+
    2023-08-31
    php
  • 一文搞懂Java中的注解和反射
    目录1、注解(Annotation)1.1 什么是注解(Annotation)1.2 内置注解1.3 元注解(meta-annotation)1.4 自定义注解2、反射(Reflec...
    99+
    2024-04-02
  • 一文搞懂Spring中的注解与反射
    目录前言一、内置(常用)注解1.1@Overrode1.2@RequestMapping1.3@RequestBody1.4@GetMapping1.5@PathVariable1....
    99+
    2024-04-02
  • 一文搞懂SpringMVC中@InitBinder注解的使用
    目录简介应用示例原理解读环境:Springboot2.4.12 简介 ​@Controller或@ControllerAdvice类可以有@InitBinder方法来初始化WebDa...
    99+
    2024-04-02
  • php依赖注入指的是什么
    本篇内容介绍了“php依赖注入指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在PHP中,依赖注入是指对类的依赖通过构造器完成自动注...
    99+
    2023-06-29
  • 如何在PHP中实现依赖注入
    这篇文章给大家介绍如何在PHP中实现依赖注入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先,我们来看一段代码:class A{      &nb...
    99+
    2023-06-17
  • 一文搞懂Spring中的JavaConfig
    目录配置类注册组件扫描包配置事务注解驱动单元测试加载配置类properties配置文件加载(了解)aspectj注解开关传统spring一般都是基于xml配置的,不过后来新增了许多J...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作