600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Laravel的“服务容器”和“服务提供者” 哪个是laravel 的核心?

Laravel的“服务容器”和“服务提供者” 哪个是laravel 的核心?

时间:2020-08-19 04:06:33

相关推荐

Laravel的“服务容器”和“服务提供者” 哪个是laravel 的核心?

后端开发|php教程

php,laravel

后端开发-php教程

在一些资料中看到说,“服务容器”是laravel 的核心,“服务提供者”也是laravel 的核心。

问题:

1、究竟哪个是核心,还是它们两个组合起来构成了核心?

2、它们两个的关系是什么?

3、它们两个各自的作用是什么的?

4、有“服务容器”,有“服务提供者”,那具体的“服务”在什么地方?打个比方,就是有装饭的锅,有装饭的碗,那饭在什么地方?是在锅里,还是在碗里,还是在田里?

pb源码 存 读 图片,vscode选择文本,写入ubuntu,tomcat配置DW,xe10.2 sqlite,qq插件安装程序,好的前端框架有哪些,宠物身上的小爬虫,php加密图片,郑州SEO哪家厉害,手机 网站制作,写一个网页注册页面,discuz导入模板安装lzw

php登陆页面源码,vscode配置真麻烦,断电 ubuntu,tomcat用nio,sqlite3 依赖文件,微信电影插件怎么卸载,微信小程序前端开源框架,python自学爬虫可以吗,iis php 优化,邵武专业seo排名,视频教学网站模板,分段式全屏网页源码,支付宝发送模板消息lzw

回复内容:

客房控制系统 源码,x98 ubuntu,tomcat 消息中间件,爬虫主题酒店,黑马php程序员,tags seolzw

在一些资料中看到说,“服务容器”是laravel 的核心,“服务提供者”也是laravel 的核心。

问题:

1、究竟哪个是核心,还是它们两个组合起来构成了核心?

2、它们两个的关系是什么?

3、它们两个各自的作用是什么的?

4、有“服务容器”,有“服务提供者”,那具体的“服务”在什么地方?打个比方,就是有装饭的锅,有装饭的碗,那饭在什么地方?是在锅里,还是在碗里,还是在田里?

可以去看我的这篇笔记

/a/1190000004965752

摘选

Contracts, ServiceContainer, ServiceProvider, Facades关系

Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法

ServiceContainer 实现Contracts,具体的逻辑实现

ServiceProvider ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中

Facades简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法

实现

Contracts接口可以写或不写,这里就不定义了

定义一个ServiceContainer,实现具体的功能

namespace App\Helper;class MyFoo{ public function add($a, $b) { return $a+$b; }}

定义一个ServiceProvider供其他地方使用ServiceContain

app->bind("myfoo", function(){ return new MyFoo(); }); }}

在app/config.php中的providers数组中加入ServiceProvider,让系统自动注册

App\Providers\MyFooServiceProvider::class,

这时候就可以使用了,假设在控制器中使用

public function two($id=null){ //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2);}

这样太麻烦,还需要用make来获取对象,为了简便,就可以使用门面功能,定义门面MyFooFacade

namespace App\Facades;use Illuminate\Support\Facades\Facade;class MyFooFacade extends Facade{ protected static function getFacadeAccessor() { //这里返回的是ServiceProvider中注册时,定义的字符串 return myfoo; }}

在控制器里就可以直接调用了

use App\Facades\MyFooFacade;public function two($id=null){ //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用门面 echo MyFooFacade::add(4,5);}

总的来说,自定义了一个类,为了方便在其他别处使用,便可以使用服务提供者和门面

Laravel中Container就好似一个大水桶,是核心,每一个Service就好似装满一种饮料的瓶瓶罐罐,Service Provider就好似连接饮料瓶和水桶的插管,可要可不要,直接往水桶里倒也行,虽然这样不讲究。。想去大水桶喝饮料去(一次请求来了),Facade就好似是水瓢帮你从水桶里舀水,当然不要也行直接用手,虽然不卫生,所以Facade可要可不要。

奥,对了,还有一个Contract,主要是为了好管理每一个Service,在碳酸水Service里,那也有分类,可乐百事被一个Contract拴在一起,雪碧美年达被另一个Contract拴在一起,主要也是为了好测试好替换而已。。

总之,Laravel这几个主要概念也就干了这些事,没啥高深的。

如有不全面的请留言。

关于这个推荐一篇博文

laravel 学习笔记 —— 神奇的服务容器

简单的说,“服务容器”就是“服务提供者”提供的服务的容器,“服务容器”通过“服务提供者”来获取服务。

一个laravel应用就是一个“服务容器”,整个框架提供的各种功能由“服务提供者”提供并注入到“服务容器”中。每一个“服务提供者”里register的方法里面使用bind邦定某个对象到一个变量,那个对象就是真正提供服务的对象。

服务容器和服务提供者的核心是降低查询数据库的rps参数

from /q/1010000000602732

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。