不知不觉,我们已经来到了第10小节。这一小节,我们一起讨论关于“事件”这个话题。众所周知,从二进制到汇编,再到高等级语言,这一路发展下来,代码都是顺序执行的,那么事件是什么?这个事件上本没有事件,纠结的人多了也就有了事件。

如果你也是编程界的泥石流,你就会发现事件发源于消息(或者信号),当代码执行到某个特殊时刻想要做一件事情,我们就调用一个函数来处理,而这个函数就是我们说的“事件”。

跟据上面的讨论,大家会发现,事件的普遍概念即是“函数调用”。所以它的好处不言而喻,那就是代码语义化以及降低代码的耦合度。当某个事情不处理了,我们取消事件函数的调用就行,就不需重新对主要的业务流程进行覆盖测试。

Laravel框架的事件机制的实现,也是这种思维。一个事件(类)匹配一个侦听器(类),由对应的侦听器处理对应的事件。下面就让我们一起了解Laravel中事件如何使用:

1、创建事件

在创建事件之前,我们需要在/app/Providers/EventServiceProvider.php中的$listen一节中进行配置。如下图:

上图的配置说明 ,有个MyEvent事件类,一旦这个事件类被触发,则由MyListener这个侦听器类进行处理。

接下来,在项目的根目录中执行以下命令,自动生成MyEvent和MyListener两个类:

php artisan event:generate

生成后的结果,如下所示:

2、事件分布与响应

1) 事件的分发

event(new MyEvent());    //根据真实的MyEvent构造函数进行实例化

2) 事件的响应

因为MyEvent对应的侦听器是MyListener,所以事件的响应即是MyEvent类中的handler函数:

class MyListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
} /**
* Handle the event.
*
* @param MyEvent $event
* @return void
*/
public function handle(MyEvent $event)
{
//在这里进行处理
}
}

写在后面:在这一篇事件讨论话题中,所有的事件分发和响应都是同步执行的,虽然实现的位置不一样,但是一样的流水线执行。如果碰到像类似于发邮件这种耗时的操作,我们就需要采用异步执行,这时就需要列队。Laravel提供了列队的机制与配置,下一期我们讨论完成列队之后,我们会花点时间讨论一下列队异步事件的实现。

这一篇就先到这里了,大家下期见:)

---------------------------  我是可爱的分割线  ----------------------------

最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

Laravel入坑指南(10)——事件Event的更多相关文章

  1. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  2. Elasticsearch入坑指南之RESTful API

    Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...

  3. Rust入坑指南:鳞次栉比

    很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...

  4. Rust入坑指南:亡羊补牢

    如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...

  5. Rust入坑指南:齐头并进(上)

    我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...

  6. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

  7. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  8. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

  9. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

  10. laravel框架中Job和事件event的解析

    本篇文章给大家带来的内容是关于laravel框架中Job和事件event的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在做项目的时候,一直对Job和Event有个疑惑.感觉两 ...

随机推荐

  1. [转帖]Kafka常见使用场景与Kafka高性能之道

    https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种 ...

  2. [转帖]【有效解决】Edge浏览器提示你的连接不是专用连接怎么办?

    https://www.xitongzhijia.net/xtjc/20230524/290887.html Win11正式版iso镜像最新(22H2新版) V2023 大小:4.22 GB类别:Wi ...

  3. [转帖]3.3.6. 活跃会话历史报告SYS_KSH

    https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys- ...

  4. [转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能

    https://my.oschina.net/cncf/blog/5121393   朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计.开发和维护工作.张浩,腾讯云 ...

  5. [转帖]Linux中./configure、make、make install命令详解

    简单来说,make 是编译,make install 是安装.   总结:linux编译安装中configure.make和make install各自的作用  • ./configure是用来检测你 ...

  6. CentOS确认网口是否插入网线的办法

    最近公司的机器存在网络问题, 部分网络总是不通, 比较奇怪. 最近一直想处理好. 第一步: 先查看网口的设备信息 可以使用 ip link show 可以讲网口信息都展示出来. 一般情况下  NO-C ...

  7. vue3获取数据的注意点

    场景描述 在使用vue3的时候.我们很多人喜欢一个页面分成几个几个部分来写 这样做的目的是为了区分. 做的彼此的逻辑互相独立,互不干扰 但是有的时候,我们可能会去获取不属于自己区域的函数 这个时候我们 ...

  8. 【小测试】golang中使用string()来转换[]byte数组产生了拷贝

    下方是benchmark的数据差异: import ( "reflect" "unsafe" ) // NoAllocString convert []byte ...

  9. 【0基础学爬虫】爬虫基础之自动化工具 Playwright 的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  10. GitHubDesktop汉化和下载

    GitHubDesktop下载 这玩意官网下载速度特别慢 如果不想等待的可以戳下面链接进行下载 会实时同步更新的 下载地址:GitHubDesktop下载