摘要:依赖注入依赖注入是个花俏的名词,事实上是指类的依赖通过构造器或在某些情况下通过方法注入。通过服务容器来管理类依赖并进行依赖注入。其中最常见的方式叫做依赖注入,简称,还有一种方式叫依赖查找。也可以说,依赖被注入到对象中。
依赖注入
依赖注入是个花俏的名词,事实上是指:类的依赖通过构造器或在某些情况下通过「setter」方法「注入」。先看一段 Laravel 控制器里的代码实例:
users = $users; } /** * 显示指定 ID 的用户。 * * @param int $id * @return View */ public function show($id) { $user_info = $this->users->find($id); return view("user", ["user_info" => $user_info]); } }
Laravel 通过服务容器来管理类依赖并进行依赖注入。如果使用一个接口作为函数参数的类型提示,这个时候就需要将指定的实现绑定到接口上面:
interface EventPusher { public function send($data); }
class RedisEventPusher implements EventPusher { public function send($data) { // } }
$this->app->bind("AppContractsEventPusher", "AppServicesRedisEventPusher");
use AppContractsEventPusher; /** * 创建一个新的类实例。 * * @param EventPusher $pusher * @return void */ public function __construct(EventPusher $pusher) { $this->pusher = $pusher; }
这个就是所谓的面向接口编程,接口可以理解为一个规范、一个约束。高层模块不直接依赖于低层模块,它们都应该依赖于抽象(指接口)。
使用依赖注入,最重要的一点好处就是有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
控制反转控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则。其中**最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
c = new C(); // 实例化创建C类 } public function sayC() { echo $this->c->say(); // 调用C类中的方法 } } $a = new a(); $a->sayC();
当有了IoC/DI的容器后,A类不再主动去创建C了,如下图所示:
而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,如下图所示:
c = $c; // 实例化创建C类 } public function sayC() { echo $this->c->say(); // 调用C类中的方法 } } $c = new C(); $a = new a(); $a->setC($c); $a->sayC();参考链接
类型约束
PHP 依赖注入,从此不再考虑加载顺序
Java基础:面向对象三大特征、五大原则
依赖倒置原则
PHP程序员如何理解依赖注入容器(dependency injection container)
聊一聊PHP的依赖注入(DI) 和 控制反转(IoC)
深入探討依賴注入
服务容器
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22049.html
摘要:可以为服务提供者的方法设置类型提示。方法将在所有其他服务提供者均已注册之后调用。所有服务提供者都在配置文件中注册。可以选择推迟服务提供者的注册,直到真正需要注册绑定时,这样可以提供应用程序的性能。 本文最早发布于 Rootrl的Blog 导言 Laravel是一款先进的现代化框架,里面有一些概念非常重要。在上手Laravel之前,我认为先弄懂这些概念是很有必要的。你甚至需要重温下PHP...
摘要:上面应用依赖容器后这段代码来自从容器中取得中服务提供者看看官方的例子注册一个服务在容器中注册绑定。使用绑定单例有没有发现方法其实就是往依赖容器里设置一个类。然后官方文档也说了,就是一个服务容器,听名字也知道了其实就是依赖容器。 其实laravel中的服务容器就是一个依赖容器,依赖容器是什么,请看下文。 依赖注入 当一个系统变复杂后,经常会遇到A类需要B类的方法,B类需要C类的方法这样的...
摘要:框架中就是使用服务容器来实现控制反转和依赖注入。容器依赖注入的实现实现原理需要了解的知识点闭包匿名函数匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数反射以上版本具有完整的反射,添加了对类接口函数方法和扩展进行反向工程的能力。 前言 通过实现laravel 框架功能,以便深入理解laravel框架的先进思想。 什么是服务容器 服务容器是用来管理类依赖与运行依赖注入的工具。La...
摘要:控制反转容器控制反转使依赖注入变得更加便捷。有瑕疵控制反转容器是实现的控制翻转容器的一种替代方案。容器的独立使用即使没有使用框架,我们仍然可以在项目中使用安装组件来使用的控制反转容器。在没有给定任何信息的情况下,容器是无法实例化相关依赖的。 声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味...
摘要:引述最近看设计模式以及代码,对于控制反转以及依赖注入这些概念非常困惑,于是找了一些资料,以下是对于控制反转的一下理解。其中最常见的方式叫做依赖注入,简称,还有一种方式叫依赖查找。在软件工程中,依赖注入是种实现控制反转用于解决依赖性设计模式。 引述 最近看设计模式以及laravel代码,对于控制反转以及依赖注入这些概念非常困惑,于是找了一些资料,以下是对于控制反转的一下理解。 概念 Io...
阅读 1441·2021-11-24 09:39
阅读 1749·2021-11-22 15:25
阅读 3665·2021-11-19 09:40
阅读 3251·2021-09-22 15:31
阅读 1263·2021-07-29 13:49
阅读 1174·2019-08-26 11:59
阅读 1289·2019-08-26 11:39
阅读 905·2019-08-26 11:00