unique / events
提供基本事件功能。
1.0.2
2021-11-03 10:14 UTC
Requires
- php: >=7.4
- ext-dom: *
Requires (Dev)
- phpunit/phpunit: ^9.4
This package is auto-updated.
Last update: 2024-09-29 05:29:15 UTC
README
此包提供了一个非常基本的事件系统。
安装
此组件需要php >= 7.4。要安装它,您可以使用composer
composer require unique/events
用法
假设您想创建一个文件加载器,该加载器将加载文件并抛出一个带有文件内容的事件。
在这种情况下,您首先需要创建一个简单的事件对象。让我们称它为FileLoadEvent
。
class FileLoadEvent implements \unique\events\interfaces\EventObjectInterface { use \unique\events\traits\EventObjectTrait; public ? string $contents = null; }
现在让我们编写一个简单的文件加载器类
class FileLoader implements \unique\events\interfaces\EventHandlingInterface { const EVENT_AFTER_LOAD = 'after_load'; use \unique\events\traits\EventTrait; public function load() { // ...some logic to load the file and set $contents value $event_object = new FileLoadEvent(); $event_object->contents = $contents; $this->trigger( self::EVENT_AFTER_LOAD, $event_object ); return $event_object->getHandled(); } }
现在您可以通过添加事件处理器来使用您定义的事件功能
$obj = new FileLoader(); $obj->on( FileLoader::EVENT_AFTER_LOAD, function ( FileLoadEvent $event_object ) { if ( $event_object->contents !== '' ) { // do something... $event_object->setHandled( true ); } } ); $obj->getContents();
这将为EVENT_AFTER_LOAD
事件定义一个事件处理器。处理器执行一些逻辑并标记事件为已处理。
如果您为同一事件定义了多个处理器,则事件将传播到所有处理器都被调用或其中一个处理器将handled
属性设置为true
为止。
文档
on( string $event, $callback )
为指定的事件类型设置新的处理器。
string $event
- 事件名称。建议在触发类上将这些事件定义为常量。\Closure|array $callback
- 事件处理器。将接收一个参数:( EventObjectInterface $event )
trigger( string $event_name, EventObjectInterface $event )
触发指定的事件。首先将调用的第一个分配的处理器。如果没有设置EventObjectInterface::setHandled()
,则将调用第二个处理器,依此类推,直到所有处理器都已调用或设置了setHandled( true )
。
string $event_name
- 事件名称。建议在触发类上将这些事件定义为常量。EventObjectInterface $event
- 事件对象
off( string $event, $callback = null )
从对象中删除事件处理器。如果没有提供处理器,则删除所有处理器。
string $event
- 事件名称。建议在触发类上将这些事件定义为常量。\Closure|array|null $callback
- 使用on()
之前分配的事件处理器。