unique/events

提供基本事件功能。

1.0.2 2021-11-03 10:14 UTC

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()之前分配的事件处理器。