PHP 服务契约,laravel 契约的使用
契约的使用这方面很少文章介绍,很多文章都是直接翻译了文档,并没有提到实际中的使用。
个人理解的契约就是接口,那么他的使用其实是应该类似于写观察者模式时候一样,方法中的参数使用的是接口,但实际传参的时候,用的是实例化接口的类。
在服务容器那一个章节,有这个一个介绍
先写一个接口和两个实例化的类
namespace App;
interface BookInterface
{
public function getCurrentPage();
}
namespace App;
class EBook implements BookInterface
{
public function getCurrentPage()
{
return 'EBook current page';
}
}
namespace App;
class PaperBook implements BookInterface
{
public function getCurrentPage()
{
return 'paper current page';
}
}
$this->app->bind(
'App\Contracts\EventPusher',
'App\Services\RedisEventPusher'
);
原本想着直接在一个方法中这样写 app()->bind(BookInterface::class,PaperBook::class); 但测试后发现不行,
必须写到 App\Providers 目录下的文件夹中 register方法里才可以
namespace App\Providers;
use App\BookInterface;
use App\EBook;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(BookInterface::class,EBook::class);
}
}
现在如果在一个方法中直接注入 BookInterface 接口,会默认使用 EBook 这个类
public function index(BookInterface $book)
{
dd($book->getCurrentPage()); // EBook current page
}
另一种实现方式就比较好理解
public function index()
{
return $this->getPage(new EBook());
}
public function getPage(BookInterface $book)
{
return $book->getCurrentPage();
}
PHP 服务契约,laravel 契约的使用相关推荐
- laravel 契约
对于所需要的内容,约定一个统一的规范 契约 是通过这个方法绑定的 $app->singleton() 契约也是绑定在标识中 bind() 下的 this->bindings[$abstra ...
- 看本质:微服务为什么需要契约测试?
01.微服务为什么需要契约测试 首先我介绍一下公司的情况.我们使用的是微服务架构,每个部分会负责其中的几个微服务的研发和维护.我所在的部门维护公司的支付服务(billing),这个服务需要依赖其他部门 ...
- WCF契约的简单介绍(服务契约 数据契约 消息契约)
本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或 ...
- (2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性
本章节主要目的:了解[ServiceContract]特性 如前几章的进度,相信已经可以自己编写服务契约以及如何在客户端调用配置好的服务了. 本片主要讲解一下SerivceContract中的几个重要 ...
- (2) 第二章 WCF服务与数据契约 服务契约详解(二)- 如何引用WCF提供的服务
本章节主要目的:掌握如何引用WCF提供的服务 下面来讲解一下如何引用WCF的服务,主要讲解2种方式: 1.Service References 操作步骤:1.在项目中右键鼠标->2.点击添加引用 ...
- echo 多行_分享laravel-echo-server广播服务搭建-Laravel
下面由Laravel教程栏目给大家介绍laravel-echo-server广播服务搭建,希望对需要的朋友有所帮助! 动机 当前项目中很多场景采用 Redis 队列和定时任务来处理执行时间较长的任务, ...
- 一个基于server酱推送服务的laravel package
最近在做服务器通知的时候,发现邮件,短信什么的都需要钱,但是自己需要的服务要求也不高,遂找到了server酱做代替,真的是一个非常好用简单易用的的推送工具,你可以用来做, 服务器运维通知 评论通知,当 ...
- Laravel核心解读--Contracts契约
Contracts Laravel 的契约是一组定义框架提供的核心服务的接口, 例如我们在介绍用户认证的章节中到的用户看守器契约IllumninateContractsAuthGuard 和用户提供器 ...
- Laravel源码解析之契约
概述 Contract,翻译过来叫契约.协议等.在 Laravel-china 的翻译中,是一个不翻词,这里也使用 Contract 来代替. Contract 就是接口 Interface,用来规范 ...
最新文章
- 有一台电脑怎么挣钱_大聪明,双十一我想6000元配置一台能畅玩主流游戏的电脑,应该怎么搭配?...
- python you-get下载视频-使用python库之you-get下载视频
- 程序时序图 Sequence Diagram(序列图) UML图(数据流程图)的绘制
- [leetcode]Edit Distance
- myeclipse怎么集成Tomcat
- leetcode322 零钱兑换
- 用python解决生活问题_Python解决生活问题之闹钟程序的实现
- 使用idea上传项目到gitHub
- node 无脑生成小程序二维码图
- oracle中的多表连接
- .Net Email操作类
- 拓端tecdat|R语言多项式线性模型:最大似然估计二次曲线
- BUG Error:Execution failed for task ':app:dexDebug'.
- 2020-10-22标准正态分布表(scipy.stats)
- python车辆型号识别_基于Tensorflow的车辆检测和车型识别
- K33 不是平面图_Edraw Max:一款简单好用的建筑平面图设计软件!
- NC6.3 变更销售合同维护模板后单据追溯查询提示权限问题的解释
- 2022年2月份报告合集(共326份)
- 游戏设计模式阅读笔记3——重访设计模式(观察者模式)
- vue 自定义事件 传入额外参数