博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel 依赖注入思想
阅读量:6670 次
发布时间:2019-06-25

本文共 1521 字,大约阅读时间需要 5 分钟。

依赖注入

依赖注入是个花俏的名词,事实上是指:类的依赖通过构造器或在某些情况下通过「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('App\Contracts\EventPusher', 'App\Services\RedisEventPusher');
use App\Contracts\EventPusher;/** * 创建一个新的类实例。 * * @param  EventPusher  $pusher * @return void */public function __construct(EventPusher $pusher){    $this->pusher = $pusher;}

这个就是所谓的面向接口编程,接口可以理解为一个规范、一个约束。高层模块不直接依赖于低层模块,它们都应该依赖于抽象(指接口)。

使用依赖注入,最重要的一点好处就是有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

控制反转

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则。其中**最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

clipboard.png

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();

参考链接

转载地址:http://colxo.baihongyu.com/

你可能感兴趣的文章
VBA读取word中的内容到Excel中
查看>>
Tomcat 7最大并发连接数的正确修改方法(转)
查看>>
开源分布式任务调度平台Cuckoo-Schedule
查看>>
20170224测试数据库块在文件系统缓存多少
查看>>
Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)
查看>>
微信小程序把玩(十一)icon组件
查看>>
当计算停留着网格内 Mellanox用智能网络助跑AI
查看>>
有个想法,想吧LNMP和NGINX和HAPROXY都放到docker里做集群,大家觉得怎么样?
查看>>
关于PWA落地问题的思考
查看>>
Nagios利用NSClient++监控Windows主机
查看>>
从高性能计算到人工智能—GPU的加速能力得到广泛认同
查看>>
Apache Replication主从复制同步机制实践
查看>>
JBoss 6.1安装配置问题
查看>>
FreeType in OpenCASCADE
查看>>
Facebook、中国BAT均落选,高盛全球“漂亮50”有哪些潜力股?
查看>>
一个人的 Android 开发
查看>>
Emacs之魂(五):变量的“指针”语义
查看>>
如何从 Angular 1.x 无缝升级到 Angular 2
查看>>
国内首次云计算CRM公测反响良好
查看>>
他俩窃取了34个共享单车账户,两天挣了2万多
查看>>