socarrat / events
简单的事件/钩子系统。适用于所有类型的PHP项目。
Requires
- php: >=8.0
README
Socarrat事件库包含了事件派发器的基类。它旨在既快速又简单,同时也灵活和可扩展。
安装
您可以通过运行composer require socarrat/events
通过Composer安装此包。库将在Socarrat\Events
命名空间下可用。
概念
这个包的核心是事件。
想象你在一艘小船上在公海上,你不知道自己在哪里。幸运的是,你有一些烟火。它们被附近的一艘船看到了,你获救了。
这种迷路是事件的隐喻:某种情况出现了。当你点燃烟火时,你就触发了或派发了事件。由于已经设置了钩子或事件监听器,烟雾被注意到了。当事件监听器的回调(看到你呼救的人)被执行时,就会执行动作(获救)。
用法
创建事件
为了创建事件,你需要扩展抽象类Event
。重要的是要重写$listeners
属性。
例如
use Socarrat\Events\Event; class YourCustomEvent extends Event { static protected array $listeners; }
不再需要其他东西!当然,你可以扩展事件以拥有自定义方法和属性。
监听事件
要注册事件监听器,你必须调用on
方法。闭包会在事件被派发时被调用。
第一个参数是排序顺序。顺序较低的钩子会被先调用。此方法返回分配给钩子的索引。它可能比你提供的索引要高。在这种情况下,之前的索引已被占用。
YourCustomEvent::on(1, function() { echo "Hi!"; });
派发事件
调用dispatch
方法来派发事件
YourCustomEvent::dispatch();
传递给此方法的参数会传递给所有事件监听器,这样你可以提供特定上下文的信息。
API
抽象类Socarrat\Events\Event
static protected $listeners
一个事件监听器(闭包)数组,当事件被派发时调用。
重要的是你必须在自己的实现中重写这个属性!
static function getName(): string
返回事件的名称。
static function on(int $priority, $callback): int
为当前事件注册事件监听器。返回分配给监听器的索引。
static function dispatch(...$callbackData)
派发事件。这将按顺序执行所有注册的回调,并将可选的回调数据传递给它们。
警告:这是一个阻塞函数;它将在所有回调完成之前停止执行。回调是同步执行的。
版权
(c) 2023 Romein van Buren。根据MIT许可证授权。
有关完整的版权和许可信息,请参阅与源代码一起分发的license.md
文件。license.md