博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hyperf框架 - 事件机制
阅读量:3987 次
发布时间:2019-05-24

本文共 1241 字,大约阅读时间需要 4 分钟。

事件机制包含三个角色。

事件Event

定义一个类,一般需要存储一些源数据,因此事件对象应该采用短生命周期的写法,即使用 new UserRegisterd($userId) 的写法。

调度器Dispatcher

触发事件,一般需要传递源数据到事件对象里,并且使该事件的所有监听者去做相应的处理。

监听器Listenner

调度器会将事件对象传递到监听器,监听器得到事件并做相应的处理。由于对象的传递是引用传递,且监听器是串行执行的,所以在监听器里面可以改变事件对象的数据,以传递到下一个监听器继续处理,一个事件可以被多个监听器监听,一个监听器可以监听多个事件,可以设置监听器的执行先后顺序。

定义两个事件

app/Event/UserPayedEvent.php

data = $data; } public function __destruct() {
echo 'UserPayedEvent destruct'.PHP_EOL; }}

app/Event/UserRegisterEvent.php

data = $data; } public function __destruct() {
echo 'UserRegisterEvent destruct'.PHP_EOL; }}

定义两个监听器

app/Listener/SendEmailListener.php

data); }}

app/Listener/SendSmsListener.php

data); }}

注册监听器到配置文件

排在前面的监听器先被执行。

config/autoload/listeners.php

投递事件

app/Controller/IndexController.php

request->input('userId', 0); $this->eventDispatcher->dispatch((new UserRegisterEvent($userId))); echo 'done'.PHP_EOL; } public function testUserPayed() {
$userId = $this->request->input('userId', 0); $money = $this->request->input('money', 0); $this->eventDispatcher->dispatch((new UserPayedEvent(['userId'=>$userId, 'money'=>$money]))); }}

多个监听器是串行的,且是有顺序的。

事件对象被最后一个监听器执行完就会被释放掉。

转载地址:http://gbaui.baihongyu.com/

你可能感兴趣的文章
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.177 - LeetCode1310
查看>>
No.178 - LeetCode1311
查看>>
Mac:终端实用快捷键
查看>>
FE:http状态码
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
No.183 - LeetCode1324
查看>>
mac:移动python包路径
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql alter table 修改列属性的字符集
查看>>
mysql:sql drop database 删除数据库
查看>>
mysql:sql character set utf8mb4 新建utf8mb4表
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
mysql:sql order by */* desc (查询)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
剑指Offer:字符流中第一个不重复的字符
查看>>
剑指Offer:链表中环的入口节点
查看>>