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();
};
相关文章
|
2月前
|
设计模式 开发框架 PHP
深入浅出PHP中的依赖注入:实现与实践
在软件开发中,依赖注入(Dependency Injection, DI)作为一种设计模式,已经被广泛用于提高代码的模块化和可测试性。PHP作为一门动态脚本语言,在现代Web开发框架中广泛应用。本文将探讨依赖注入的基本概念、实现方式,并结合PHP语言特性,展示如何在日常开发中有效利用依赖注入来构建更加灵活和可维护的应用程序。
|
设计模式 测试技术 PHP
PHP为什么需要依赖注入?底层原理是什么?
PHP为什么需要依赖注入?底层原理是什么?
151 0
Cyi
|
PHP 容器
php 控制反转和依赖注入
曾经网上找了很久的概念,发现很多讲的都是很深奥的概念和复杂的哲学。今日朋友突然问我关于控制反转和依赖注入的理解,闲来无事就将其写成了本文,文笔稚嫩还请海涵,作为一个笨比,我有笨比自己的理解方式,如果你也在苦恼这些深奥的概念,那不如先看看笨比的理解。
Cyi
108 0
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
1月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
43 0
|
24天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
27天前
|
安全 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
——深入探索LAMP栈下的高效数据交互与处理技巧 ####
|
25天前
|
关系型数据库 MySQL PHP
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
26 4
|
1月前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
深入探索PHP与MySQL的协同工作机制,本文旨在通过一系列实战案例,揭示构建高效、稳定且用户友好的动态网站的秘诀。从环境搭建到数据交互,再到最佳实践分享,本文为开发者提供了一条清晰的学习路径,助力其在LAMP(Linux, Apache, MySQL, PHP/Perl/Python)栈上实现技术飞跃。 ####