php 中的 DI 依赖注入

简介: 学好依赖注入,让编程更简单

🎈 什么是 DI / 依赖注入

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


🎈 依赖注入出现的原因

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


🎈 简单的依赖注入

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


🎈 高阶的依赖注入

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


🎈 依赖注入的应用

  • 我们先定义一个 容器类,主要用来向容器中 注入 你想要操作的类
  • 使用的时候,只需要传容器这一个 对象 即可
<?phpclasscontainer{
public$instance= [];
publicfunction__set($name, $value)
    {
$this->instance[$name] =$value;
    }
}
classadapter{
public$name='我是调度器';
}
$container=newcontainer();
$container->adapter=newadapter();
classautofelix{
private$container;
publicfunction__construct(container$container)
    {
$this->container=$container;
    }
publicfunctionwho($class)
    {
return$this->container->instance[$class]->name;
    }
}
$autofelix=newautofelix($container);
$who=$autofelix->who('adapter');
var_dump($who); //我是调度器


🎈 依赖注入高阶优化

  • 在上面的应用中,我们 直接 将实例化后的对象注入容器中
  • 这样会导致,所有的对象还没有被使用就会被实例化一遍,造成 资源的损耗
  • 我们可以 传入闭包,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少 服务器资源的损耗
<?php$container=newcontainer();
$container->adapter=newadapter();
//高阶优化$container=newcontainer();
$container->adapter=function () {
returnnewadapter();
};
相关文章
|
1月前
|
设计模式 开发框架 PHP
深入浅出PHP中的依赖注入:实现与实践
在软件开发中,依赖注入(Dependency Injection, DI)作为一种设计模式,已经被广泛用于提高代码的模块化和可测试性。PHP作为一门动态脚本语言,在现代Web开发框架中广泛应用。本文将探讨依赖注入的基本概念、实现方式,并结合PHP语言特性,展示如何在日常开发中有效利用依赖注入来构建更加灵活和可维护的应用程序。
|
设计模式 测试技术 PHP
PHP为什么需要依赖注入?底层原理是什么?
PHP为什么需要依赖注入?底层原理是什么?
147 0
Cyi
|
PHP 容器
php 控制反转和依赖注入
曾经网上找了很久的概念,发现很多讲的都是很深奥的概念和复杂的哲学。今日朋友突然问我关于控制反转和依赖注入的理解,闲来无事就将其写成了本文,文笔稚嫩还请海涵,作为一个笨比,我有笨比自己的理解方式,如果你也在苦恼这些深奥的概念,那不如先看看笨比的理解。
Cyi
104 0
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
137 9
|
3月前
|
存储 SQL 关系型数据库
PHP与MySQL交互的奥秘
【8月更文挑战第29天】在编程的世界里,PHP和MySQL就像是一对默契的舞伴,共同演绎着数据的交响曲。本文将带你探索它们之间的互动,从连接数据库到执行查询,再到处理结果,每一步都充满了节奏与和谐。我们将一起走进这段代码的旅程,感受数据流动的魅力。
|
8天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1
|
13天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
14天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
本文深入探讨了PHP与MySQL在动态网站开发中的应用实践,通过具体案例解析如何高效结合这两大技术构建数据驱动的Web应用。文章将涵盖环境搭建、基础语法回顾、数据库设计与操作、用户注册与登录系统实现等关键步骤,旨在为开发者提供一个从零到一的项目实战路径,展示PHP与MySQL协同工作的强大能力。 ####