php,laravel,依赖注入
后端开发-php教程
这篇文章主要介绍了关于PHP中的服务容器与依赖注入,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下酷狗手机版音乐播放器源码,ubuntu配置网卡上网,tomcat打开时空白页,公信宝爬虫,php函数放字符串里,优化思维seolzw
依赖注入
就拿我们业务中常用的通知模块来说。
java list源码,vscode太慢,uboot ubuntu,h5部署到tomcat,c sqlite下载,网页设计宽度多少,服务器的环境搭建,百度日历插件,前端框架包含什么,爬虫无服务器,php制作表格,和seo,门户网站客户端源代码,jquery网页特效有哪些,多多淘宝客8.1模板,页面居中代码,asp 文件管理系统,mfc小程序下载lzw
messager = new Message(); } public function seed_msg() { return $this->messager->seed(); }}$Order = new Order();$Order->seed_msg();
上面的代码是我们传统的写法。首先由个消息发送的类。然后在我们需要发送消息的地方,调用发送消息的接口。有一天你需要添加一个发送短信的接口以满足不同的需求。那么你会发现你要再Message
类里面做修改。同样也要再Order
类里面做修改。这样就显得很麻烦。这个时候就有了依赖注入的思路。下面把代码做一个调整
linux wifi源码,gm vscode,ubuntu文件关联,iea tomcat,c 调用sqlite,云服务器 上传文件,wordpress 图文直播插件,前端框架哪个快,爬虫 淘宝 python,php界面框架,seo95,大众点评网站模板,网页制作源码下载,模板 链接 自动加前缀,天猫页面居中代码,订单管理系统英文,易语言关闭程序代码lzw
messager = $message; } public function seed_msg() { return $this->messager->seed(); }}//我们需要发送邮件的时候$message = new SeedEmail();//将邮件发送对象作为参数传递给Order$Order = new Order($message);$Order->seed_msg();//我们需要发送短信的时候$message = new SeedSMS();$Order = new Order($message);$Order->seed_msg();
这样我们就实现了依赖注入的思路,是不是很方便扩展了。
服务容器
binds[$abstract] = $concrete; } else { $this->instances[$abstract] = $concrete; } } public function make($abstract, $parameters = []) { if (isset($this->instances[$abstract])) { return $this->instances[$abstract]; } array_unshift($parameters, $this); return call_user_func_array($this->binds[$abstract], $parameters); }}//创建一个消息工厂$message = new Container();//将发送短信注册绑定到工厂里面$message->bind('SMS',function (){ return new SeedSMS();});//将发送邮件注册绑定到工厂$message->bind('EMAIL',function (){ return new SeedEmail();});//需要发送短信的时候$SMS = $message->make('SMS');$SMS->seed();
container
是一个简单的服务容器里面有bind
,make
两个方法bind
是向容器中绑定服务对象。make
则是从容器中取出对象。
bind
在bind
方法中需要传入一个 concrete
我们可以传入一个实例对象或者是一个闭包函数。
可以看到我这全使用的是闭包函数,其实也可以这样写
$sms = new SeedSMS();$message->bind('SMS',$sms);
后面这种写法与闭包相比的区别就是我们需要先实例化对象才能往容易中绑定服务。而闭包则是我们使用这个服务的时候才去实例化对象。可以看出闭包是有很多的优势的。
make
make
方法就从容器中出去方法。里面首先判断了instances
变量中是否有当前以及存在的服务对象,如果有直接返回。如果没有那么会通过 call_user_func_array
返回一个对象。call_user_func_array
的使用可以查看
PHP 中 call_user_func 的使用