本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于依赖注入的相关问题,依赖注入DI 其实本质上是指对类的依赖通过构造器完成 自动注入,下面一起来看一下,希望对大家有帮助。
(推荐教程:PHP视频教程)
什么是 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视频教程)
以上是简单搞懂PHP中的DI依赖注入的详细内容。更多信息请关注PHP中文网其他相关文章!

本文比较了酸和基本数据库模型,详细介绍了它们的特征和适当的用例。酸优先确定数据完整性和一致性,适合财务和电子商务应用程序,而基础则侧重于可用性和

本文讨论了确保PHP文件上传的确保,以防止诸如代码注入之类的漏洞。它专注于文件类型验证,安全存储和错误处理以增强应用程序安全性。

本文讨论了在PHP中实施API速率限制的策略,包括诸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之类的库。它还涵盖监视,动态调整速率限制和手

本文讨论了使用password_hash和pyspasswify在PHP中使用密码的好处。主要论点是,这些功能通过自动盐,强大的哈希算法和SECH来增强密码保护

本文讨论了OWASP在PHP和缓解策略中的十大漏洞。关键问题包括注射,验证损坏和XSS,并提供用于监视和保护PHP应用程序的推荐工具。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1
好用且免费的代码编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),