1.服务是什么?

服务是提供了一些功能的类,比如发送邮件,写日志.

2.Laravel服务提供者是什么?

服务提供者中指明了这个提供者可以提供哪些服务(注册服务),以及服务注册后默认调用一些方法(boot).

3.能否不用服务提供者,直接调用服务?

可以,依靠Laravel的依赖注入,你可以方便的调用任何一个服务,而不用服务提供者.

4.既然3成立,那么服务提供者有什么存在的必要?

a.利用服务提供者的boot方法,可以做一些全局性的设置,如在boot中对view的composer
b.服务提供者利用bind或singleton可以实现一个接口到实现类绑定,调用该服务对应的接口,会返回了一个具体的实现类.这不是更复杂了么?是的,是有点复杂,但好处是松耦合,更加灵活,调整服务也变的更加简单.

5.服务容器是什么?

服务容器是一个用于管理类依赖和执行依赖注入的强大工具.简而言之就是,你将功能类(服务)作为参数传递到一个容器类中,以后直接调用容器类就可以.服务提供者的绑定就是向Laravel核心容器类,传递了一个服务类来做参数,核心容器类内部实现了绑定该服务作为容器类的一个属性.

9.服务提供者在应用启动时,就会注册相应的服务,这会不会显得没有必要?因为有些情况下,不是应用开始就需要这个服务的.

是,所以你可以在服务提供者中延迟加载,只有在你需要的时候才加载这个服务.设置服务提供者的defer属性和provides方法.

10.服务提供者功能之一是实现了一个接口到实现类的绑定,能否根据具体情况,比如A控制器中调用服务接口实现接口的A实现类,B控制器中调用接口的B实现类?

可以,在服务提供者中绑定的时候实现依据上下文环境绑定.

$this->app->when('App\Handlers\Commands\CreateOrderHandler')
->needs('App\Contracts\EventPusher')
->give('App\Services\PubNubEventPusher');

11.有没有一个服务提供者聚合多个服务的结果,对外使用一个统一的名称来访问?

可以,使用服务提供者的标签

12.能从服务容器中解析出一个对象吗?

可以.
a.使用$this->app->make('xxx')或$this->app['xxx'],在控制器中使用帮助函数app()->make('XXX')
b.可以简单的通过在类的构造函数中对依赖进行类型提示来从容器中解析对象,包括控制器、事件监听器、队列任务、中间件等都是通过这种方式
public function __construct(UserRepository $users)
{
$this->users = $users;
}

13.能否在从容器中解析对象的时候触发一个事件?

可以,在服务提供者中使用$this->app->resolving

14.门面和契约是什么?

a.Laravel 的契约是指框架提供的一系列定义核心服务的接口,比如, Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要的方法, Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要的方法.每一个契约都有框架提供的相应实现。比如,Laravel 提供了多个驱动的队列实现,邮件实现则由 SwiftMailer驱动。所有的 Laravel 契约都有其 GitHub 库,这为所有有效的契约提供了快速入门指南,同时也可以作为独立、解耦的包被包开发者使用。

b.Laravel 的门面为 Laravel 服务的使用提供了一个简便的方式——不再需要从服务容器中类型提示和解析契约.如Auth::user(),Auth::check();Cache::get()等

15.基本点

a.服务提供者在项目根目录下的Providers
b.可以使用命令创建一个服务提供者
php artisan make:provider TestProvider
c.每个服务提供者需要注册在在config/app.php的providers数组中

Laravel服务/服务提供者/容器/契约和门面的更多相关文章

  1. Laravel 服务容器、服务提供器、契约实例讲解

        前言 刚开始看laravel服务容器.契约.服务提供器的确生涩难懂,不单单是概念繁多,而且实际的demo很难找(找是找到了,但难用啊),最后就隔一段时间看一遍,大概个十来遍,还真给看出个门道, ...

  2. laravel服务容器-----深入理解控制反转(IoC)和依赖注入(DI)

    首先大家想一想什么是容器,字面意思就是盛放东西的东西,常见的变量,对象属性都是容器,一个容器能够装什么东西,完全在于你对这个容器的定义.有的容器不仅仅只是存文本,变量,而是对象,属性,那么我们通过这种 ...

  3. Laravel 服务容器实例教程 —— 深入理解控制反转(IoC)和依赖注入(DI)

    容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或 ...

  4. Laravel中服务提供者和门面模式

    在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel的服务提供者的方式来使用. 这两者其实区别不大,主要是前者使用的话,会跟业务代码产生依赖, ...

  5. Laravel服务容器的绑定与解析

    本篇文章给大家带来的内容是关于Laravel服务容器的绑定与解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言   老实说,第一次老大让我看laravel框架手册的那天早上,我 ...

  6. laravel 服务容器实现原理

    前言 通过实现laravel 框架功能,以便深入理解laravel框架的先进思想. 什么是服务容器 服务容器是用来管理类依赖与运行依赖注入的工具.Laravel框架中就是使用服务容器来实现 ** 控制 ...

  7. laravel服务容器

    laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...

  8. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  9. 关于使用 Laravel 服务容器的优势介绍

    如果说laravel框架的核心是什么,那么无疑是服务容器.理解服务容器的概念,对于我们使用laravel太重要了,应该说是否理解服务容器的概念是区分是否入门laravel的重要条件.因为整个框架正是在 ...

随机推荐

  1. 汕头市队赛 SRM13 T3

    这道题可以贪心 维护一个答案队列 枚举位置 每次将比当前位置大的队尾全部替代掉 记录删了多少了就好了 #include<cstdio> #include<iostream> # ...

  2. Vue全局异常捕获

    之前没注意过这么个小技巧 , 可能在Vue文档里也有  暂时先记下了 方便摘要 Vue全局配置 errorHandler可以进行全局错误收集,我们可以根据这个特性对前端异常做这样的处理:业务错误直接写 ...

  3. Centos7下yum安装mongodb

    简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 查看官方网站 MongoDB特点 模式自 ...

  4. hdu 5155(递推)

    Harry And Magic Box Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. 同样的promise,调用方法不一样,执行顺序不一样

    在测试两个不同的代码时发现的. 其实也理解,一个是新建一个空的promise,另一个是新建的promise马上执行,去分支resolve状态, 当然就空的在后. <script> //se ...

  6. Android_html5交互 弹框localstorage 存值 整体案例

    经历2周多的时间 终于是完成了还算可以的android 整体案例了,分享下给大家  也希望自己有时间回过头来看看当初研究android的纠结心情.痛苦的经历是开发android 大部分都是在网上找解决 ...

  7. [BZOJ2084][Poi2010]Antisymmetry 二分+hash

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 812  Solved: 503[Submit] ...

  8. [BZOJ1072][SCOI2007]排列perm 状压dp

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2488  Solved: 1546[Submit][St ...

  9. (5)Toad for oracle使用

    版本 toad 11.6 1.表数据颜色设置 误操作后表颜色变成这样 界面选择:view-Toad Optins 选择传统模式可以改回到原来的颜色 2.解决锁表 Database-Monitor-Se ...

  10. Mybatis批量添加,删除与修改

    1.批量添加元素session.insert(String string,object O) public void batchInsertStudent(){ List<Student> ...