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

一文聊聊php中的DI依赖注入

2024-04-02 19:04:59 506人浏览 泡泡鱼
摘要

什么是 DI依赖注入?下面本篇文章就来带大家深入了解一下PHP中的DI依赖注入,希望对大家有所帮助!什么是 DI / 依赖注入依赖注入DI 其实本质上是指对类的依赖通过构造器完成 自动注入通俗来说,就是你当前操作一个类,但是这个类的某些方法

什么是 DI依赖注入?下面本篇文章就来带大家深入了解一下PHP中的DI依赖注入,希望对大家有所帮助!

什么是 DI / 依赖注入

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

依赖注入出现的原因

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

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

简单的依赖注入

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

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

高阶的依赖注入

  • 为了解决上面 参数混乱 的问题,这时候,依赖注入进行了优化
    通过魔术方法,__get 去设置对象
  • 这时候,我们就可以解决依赖太多,参数混乱的问题了
<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

$container = new container();

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

依赖注入的应用

  • 我们先定义一个 容器,主要用来向容器中 注入 你想要操作的类
  • 使用的时候,只需要传容器这一个 对象 即可
<?php
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); //我是调度器

依赖注入高阶优化

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

//高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};
以上就是一文聊聊php中的DI依赖注入的详细内容,更多请关注编程网其它相关文章!

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • 一文聊聊Angular中的依赖注入
    译者添加:举个例子 -- 当 classA 使用 classB 的某些功能时,则表示 classA 具有 classB 的依赖。在使用 classA 之前,我们需要创建 classB。推荐文章依赖注入是什么?如何使用它?我们都知道在 Ang...
    99+
    2023-05-14
    前端 JavaScript Angular.js
  • 一文搞懂PHP中的DI依赖注入
    目录什么是 DI / 依赖注入依赖注入出现的原因简单的依赖注入高阶的依赖注入依赖注入的应用依赖注入高阶优化什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器...
    99+
    2022-11-13
    PHP DI依赖注入 PHP 依赖注入 PHP DI
  • 一文搞懂 php 中的 DI 依赖注入
    ✨ 目录 🎈 什么是 DI / 依赖注入🎈 依赖注入出现的原因🎈 简单的依赖注入🎈 高阶的依赖注入🎈 ...
    99+
    2023-09-07
    PHP 依赖注入 经验分享 开发模式 高级编程
  • 聊聊Vue3中的依赖注入与组件定义
    本次主要分享Vue3中依赖注入以及组件定义相关的几个API,以及在常用库ElementUI Plus和Vueuse中的使用情况,通过示例来理解使用场景。让我们聊聊 Vue 3中依赖注入与组件定义相关的那点事儿。provide() &...
    99+
    2023-05-14
    Vue vue3
  • Spring的DI依赖注入详解
    目录1、什么是DI依赖注入?2、利用 set 方法给属性赋值3、利用 构造函数 给属性赋值总结:1、什么是DI依赖注入? spring动态的向某个对象提供它所需要的其他对象。这一点是...
    99+
    2024-04-02
  • 聊聊Go中的循环依赖检测工具(go-cyclic)
    本篇文章给大家介绍有关Golang的相关知识,聊聊开源Go中的一个循环依赖检测工具(go-cyclic) ,希望对大家有所帮助。go-cyclic 循环依赖解决工具问题描述 作为一个 Go 开发者,经常会在大型项目中遇到包的循环依...
    99+
    2023-05-14
    Go
  • 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依赖注入
  • Spring依赖注入(DI)两种方式的示例详解
    目录一、依赖注入方式二、setter注入引用类型简单类型三、构造器注入引用类型简单类型参数适配(了解)四、依赖注入方式选择一、依赖注入方式 思考:向一个类中传递数据的方式有几种? 普...
    99+
    2024-04-02
  • 一文聊聊Node中的stream(流)
    流是用于在 Node.js 中处理流数据,也就是连续字节的抽象接口。 流有 4 种基本类型,本篇文章主要介绍其中两种 —— 可读流和可写流。可读的(Readable)我们可以通过 fs.createReadStream() 创建一个可读流 ...
    99+
    2023-05-14
    stream node nodejs​
  • 一文聊聊node中的path模块
    path 模块是 nodejs 中用于处理文件/目录路径的一个内置模块,可以看作是一个工具箱,提供诸多方法供我们使用,当然都是和路径处理有关的。同时在前端开发中 path 模块出现的频率也是比较高的,比如配置 webpack 的时候等。本文...
    99+
    2023-05-14
    path模块 Node.js
  • 聊聊PHP和MySQL注入之间的安全问题
    最近,很多网站因为被黑客攻击而暴露了敏感信息,其中一种攻击方式就是通过MySQL注入来实现。PHP是一种流行的服务器端编程语言,通常与MySQL一起使用。因此,PHP和MySQL注入之间的安全问题需要得到重视。什么是MySQL注入?MySQ...
    99+
    2023-05-14
  • 一文聊聊Node中的可读流
    本篇文章带大家解读一下Node.js流源码,深入了解下Node可读流,看看其基本原理、使用方法与工作机制,希望对大家有所帮助!1. 基本概念1.1. 流的历史演变流不是 Nodejs 特有的概念。 它们是几十年前在 Unix 操作系统中引入...
    99+
    2023-05-14
    可读流 node
  • 一文聊聊Node中的net模块
    而客户端和服务端的传输流如下如果角色变成发送者和接受者的时候,传输流如下图:可以看出来传输的过程中,从发送端开始,没经过一层协议都会加上所需要的首部信息.层层把关,层层加码. 然后到了接收端的时候, 就反而行之, 每经过一层都剥去对应的首部...
    99+
    2023-05-14
    net模块 node Node.js
  • PHP中怎样实现依赖注入
    今天就跟大家聊聊有关PHP中怎样实现依赖注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们来看一段代码:class A{ public functi...
    99+
    2023-06-04
  • 一文聊聊Node.js中的cluster(集群)
    日常工作中,对 Node.js 的使用都比较粗浅,趁未羊之际,来学点稍微高级的,那就先从 cluster 开始吧。尼古拉斯张三说过,“带着问题去学习是一个比较好的方法”,所以我们也来试一试。当初使用 cluster 时,一直好奇它是怎么做到...
    99+
    2023-05-14
    cluster Node.js
  • 一文聊聊vue3中的ref、toRef、toRefs
    (学习视频分享:vuejs入门教程、编程基础视频)以上就是一文聊聊vue3中的ref、toRef、toRefs的详细内容,更多请关注编程网其它相关文章!...
    99+
    2023-05-14
    Vue
  • 一文聊聊Vue中的KeepAlive组件
    看下面的图更加直观,图片来源一篇讲keepAlive 缓存优化的文章4、如何添加到 vue devtools 组件树上sharedContext.activate = (vnode, container, anchor) => { ...
    99+
    2022-11-22
    前端 Vue.js 前端框架
  • 深入聊一聊JDK中的Map和Set
    目录1. 基础知识2.模型3.Map的使用4.Map接口的使用(1)元素的添加和更新操作(2)在Map集合中查询/搜索特定的值(3) 删除Map中指定的value和key ...
    99+
    2022-12-21
    jdk map和set java map有哪些 jdk set集合大小
  • 一文聊聊Angular中的管道(PIPE)
    在我们设置好管道之后,浏览器中的时间已经发生了变化了其他管道Angular还提供了其他管道,比如说改变人名币格式的管道(currency):Angular - CurrencyPipehttps://angular.cn/api/commo...
    99+
    2023-05-14
    管道 Angular
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作