xobotyi/emittr

为您的应用提供事件库

v2.0.2 2018-06-29 20:10 UTC

This package is auto-updated.

Last update: 2022-07-21 20:42:46 UTC


README

License PHP 7 ready Build Status Codacy Grade Scrutinizer Code Quality Codacy Coverage Latest Stable Version Total Downloads

关于

emittr 是一个小型无依赖库,为您的应用提供事件功能。它不会引入异步执行,但会以最佳方式分离您的代码。
emittr 的主要功能是全局发射器,您可以使用它来分配事件回调,即使类还没有被自动加载。
库使用 PSR-4 自动加载标准,并且始终有 100% 的测试覆盖率。

为什么选择 emittr

  1. 它有良好的文档
  2. 我自己在享用甜点=)
  3. 即使类尚未被自动加载或声明,也可以分配事件回调
  4. 能够停止事件传播
  5. 事件发射器的静态和非静态版本

Emittr 的关键功能是 GlobalEventHandler,允许您分配事件监听器,即使事件发射器或其监听器尚未声明。
在生命周期中,事件首先通过其发射器上分配的所有监听器传播,然后通过全局处理程序上的监听器传播,除非任何监听器阻止了事件传播。

要求

安装

使用 composer 安装

composer require xobotyi/emittr

用法

use xobotyi\emittr;

class AwesomeClass extends emittr\EventEmitter
{
}

$awesomeObject = new AwesomeClass();

$awesomeObject
    ->once('testEvent', function (emittr\Event $e) {
        echo $e->getPayload()['message'] . PHP_EOL;
        $e->stopPropagation();
    })
    ->once('testEvent', function () { echo "emittr is awful!" . PHP_EOL; });

$awesomeObject->emit('testEvent', ['message' => "eittr is awesome!"]);

或者您可以使用全局发射器来分配处理程序

use xobotyi\emittr;

// note that neiter MostAwesomeClass class nor awesomeCallback function was not defined yet!
emittr\GlobalEventHandler::getInstance()
                         ->once("MostAwesomeClass", 'testEvent', 'awesomeCallback')
                         ->once("MostAwesomeClass", 'testEvent', 'nonAwesomeCallback');

class MostAwesomeClass
{
    use emittr\Traits\EventEmitterStatic;
}

function awesomeCallback(emittr\Event $e) {
    echo $e->getPayload()['message'] . PHP_EOL;
    $e->stopPropagation();
}

function nonAwesomeCallback() { echo "emittr is awful!" . PHP_EOL; }

MostAwesomeClass::emit('testEvent', ['message' => "eittr is awesome!"]);

索引

class \xobotyi\emittr\Event

  • function stopPropagation() :self;
  • function startPropagation() :self;
  • function isPropagatable() :bool;
  • function getEventName() :string;
  • function getPayload() :mixed;
  • function getSourceObject() :mixed;
  • function getSourceClass() :?string

class \xobotyi\emittr\EventEmitter

  • function emit($event, $payload = null) :self;
  • function on(string $eventName, $callback) :self;
  • function once(string $eventName, $callback) :self;
  • function prependListener(string $eventName, $callback) :self;
  • function prependOnceListener(string $eventName, $callback) :self;
  • function off(string $eventName, $callback) :self;
  • function removeAllListeners(?string $eventName = null) :self;
  • function getEventNames() :array;
  • function getListeners(?string $eventName = null) :array;
  • function getMaxListenersCount() :int;
  • function setMaxListenersCount(int $maxListenersCount) :self;
  • function getGlobalEmitter() :Interfaces\GlobalEventHandler;
  • function setGlobalEmitter(Interfaces\GlobalEventHandler $emitterGlobal) :self;

trait \xobotyi\emittr\Traits\EventEmitterStatic

  • static function getEventEmitter() :EventEmitter;
  • static function setEventEmitter(EventEmitter $eventEmitter) :EventEmitter;
  • static function emit(string $eventName, $payload = null) :void;
  • 静态函数 on(string $eventName, $callback) :void;
  • 静态函数 once(string $eventName, $callback) :void;
  • 静态函数 prependListener(string $eventName, $callback) :void;
  • 静态函数 prependOnceListener(string $eventName, $callback) :void;
  • 静态函数 off(string $eventName, $callback);
  • 静态函数 removeAllListeners(?string $eventName = null) :void;
  • 静态函数 getListeners(?string $eventName = null) :array;
  • 静态函数 getMaxListenersCount() :int;
  • 静态函数 setMaxListenersCount(int $maxListenersCount) :void;
  • 静态函数 getGlobalEmitter() :GlobalEventHandler;
  • 静态函数 setGlobalEmitter(GlobalEventHandler $emitterGlobal) :void;

class \xobotyi\emittr\GlobalEventHandler

  • 静态函数 getInstance() :self;
  • 静态函数 propagateEvent(Event $event, array &$eventsListeners) :bool;
  • 静态函数 isValidCallback($callback) :bool;
  • 静态函数 storeCallback(array &$arrayToStore, string $eventName, $callback, int $maxListeners = 10, bool $once = false, bool $prepend = false) :void;
  • 函数 loadListeners(array $listeners) :self;
  • 函数 on(string $className, string $eventName, $callback) :self;
  • 函数 once(string $className, string $eventName, $callback) :self;
  • 函数 prependListener(string $className, string $eventName, $callback) :self;
  • 函数 prependOnceListener(string $className, string $eventName, $callback) :self;
  • 函数 off(string $className, string $eventName, $callback) :self;
  • 函数 removeAllListeners(?string $className = null, ?string $eventName = null) :self;
  • 函数 getEventNames(string $className) :array;
  • 函数 getListeners(?string $className = null, ?string $eventName = null) :array;
  • function getMaxListenersCount() :int;
  • function setMaxListenersCount(int $maxListenersCount) :self;
  • 函数 propagateEventGlobal(Event $event) :bool;