Download the PHP package inhere/event without Composer
On this page you can find all versions of the php package inhere/event. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package event
Short Description event manager library of the php
License MIT
Homepage https://github.com/inhere/php-event-manager
Informations about the package event
Event Dispatcher
EN README
简洁, 功能完善的事件管理调度实现
- 实现自 Psr 14 - 事件调度器
- 支持对一个事件添加多个监听器
- 支持设置事件优先级
- 支持快速的事件组注册
- 支持根据事件名称来快速的对事件组监听
- eg 触发
app.run
,app.end
都将同时会触发app.*
事件
- eg 触发
- 支持通配符事件的监听
项目地址
安装
-
composer 命令
- composer.json
事件调度器
事件调度器, 也可称之为事件管理器。事件的注册、监听器注册、调度(触发)都是由它管理的。
事件监听器
监听器允许是:
- function 函数
- 一个闭包
- 一个监听器类(可以有多种方式)
1. function
2. 闭包
3. 监听器类(有多种方式)
- 类里面存在跟事件相同名称的方法
此种方式可以在类里面写多个事件的处理方法
- 一个类(含有
__invoke
方法)
此时这个类对象就相当于一个闭包
- 实现接口
EventHandlerInterface
触发时会自动调用 handle()
方法。
- 实现接口
EventSubscriberInterface
可以在一个类里面自定义监听多个事件
快速使用
1. 绑定事件触发
2. 触发事件
3. 运行示例
完整的实例代码在 examples/demo.php
中。
运行: php examples/demo.php
输出:
一组事件的监听器
除了一些特殊的事件外,在一个应用中,大多数事件是有关联的,此时我们就可以对事件进行分组,方便识别和管理使用。
- 事件分组 推荐将相关的事件,在名称设计上进行分组
例如:
1. 一个简单的示例应用类
2. 此应用的监听器类
将每个事件的监听器写一个类,显得有些麻烦。我们可以只写一个类用里面不同的方法来处理不同的事件。
- 方式一: 类里面存在跟事件名称相同的方法(
app.start
->start()
)
这种方式简单快捷,但是有一定的限制 - 事件名与方法的名称必须相同。
- 方式二:实现接口
EventSubscriberInterface
有时候我们并不想将处理方法定义成事件名称一样,想自定义。
此时我们可以实现接口 EventSubscriberInterface
,通过里面的 getSubscribedEvents()
来自定义事件和对应的处理方法
运行示例请看
examples/enum-group.php
3. 添加监听
4. 运行示例
完整的示例代码在 examples/named-group.php
中。
运行: php examples/named-group.php
输出:
事件通配符 *
支持使用事件通配符 *
对一组相关的事件进行监听, 分两种。
*
全局的事件通配符。直接对*
添加监听器($em->attach('*', 'global_listener')
), 此时所有触发的事件都会被此监听器接收到。{prefix}.*
指定分组事件的监听。eg$em->attach('db.*', 'db_listener')
, 此时所有触发的以db.
为前缀的事件(egdb.query
db.connect
)都会被此监听器接收到。
当然,你在事件到达监听器前停止了本次事件的传播
$event->stopPropagation(true);
,就不会被后面的监听器接收到了。
示例,在上面的组事件监听器改下,添加一个 app.*
的事件监听。
运行示例
运行: php examples/named-group.php
输出:(可以看到每个事件都经过了AppListener::allEvent()
的处理)
事件对象
事件对象 - 装载了在触发事件时相关的上下文信息,用户自定义的。
预先创建一个事件
-
直接简单的使用类
Event
- 使用继承了
Event
的子类
这样你可以追加自定义数据
License
MIT