mmdm/sim-event-dispatcher

一个简单而优雅的事件分发器

v2.0.0 2021-04-02 19:11 UTC

This package is auto-updated.

Last update: 2024-09-29 05:42:49 UTC


README

事件管理的库。

安装

composer

composer require mmdm/sim-event-dispatcher

或者您可以直接从GitHub下载zip文件并解压,然后将文件放到您的项目库中,就像使用其他库一样使用它。

只需添加以下行来自动加载文件

require_once 'path_to_library/autoloader.php';

然后您就可以开始了。

如何使用

// we need event provider to add events to that
$event_provider = new EventProvider();

// also we need closure provider to add closures to that
$closure_provider = new ClosureProvider();

// then use their methods
$event_provider->addEvent(new Event('boot'))
    ->addEvent(new Event('close'));
//-----
$closure_provider->addClosure($nameOfClosureOrKey, function () {
    // define closure functionality
});

// to instanciate an emitter object,
// use event provider and closure provider,
// from above
$emitter = new Emitter($event_provider, $closure_provider);

// now work with listeners
$emitter->addListener($nameOfEvent, $nameOfClosureOrKey);
$emitter->removeListener($nameOfEvent, $nameOfClosureOrKey);

// finally dispatch event where you want
$emitter->dispatch($nameOfEvent);

可用函数

EventProvider

  • addEvent(IEvent $event): IEventProvider

此方法向提供者添加事件

// to add an event
$event_provider->addEvent(new Event('cartOnBoot'));
  • removeEvent(string $event_name): IEventProvider

此方法从提供者中删除事件

// to remove an event
$event_provider->removeEvent('cartOnBoot');
  • getEvent(string $event_name): IEvent

此方法从提供者获取事件

// to get an event
$event_provider->getEvent('cartOnBoot');
  • hasEvent(string $event_name): bool

此方法检查事件是否存在于提供者中

// check if an event exists
$event_provider->hasEvent('cartOnBoot');

ClosureProvider

  • addClosure($key, $closure): IClosureProvider

此方法向提供者添加闭包

// to add a closure
$closure_provider->addClosure($closureKeyOrName, function () {
    // define closure functionality
});
  • removeClosure($key): IClosureProvider

此方法从提供者中删除闭包

// to remove a closure
$closure_provider->removeClosure($closureKeyOrName);
  • getClosure($key): Closure

此方法从提供者获取闭包

// to get a closure
$closure_provider->getClosure($closureKeyOrName);
  • hasClosure($key): bool

此方法检查闭包是否存在于提供者中

// check if a closure exists
$closure_provider->hasClosure('cartOnBoot');

Emitter

  • addListener(string $event_name, string $closure_name, int $priority = 0): IEmitter

此方法向发射器添加监听器

注意:如果您需要某些监听器比其他监听器更快地发射,则应传递优先级作为数字(数值越大,优先级越高)

// to add a listener
$emitter->addListener('cartOnBoot', 'cart_boot');
// or with a higher priority
$emitter->addListener('cartOnBoot', 'cart_boot', 5);
  • removeListener(string $event_name, string $closure_name): IEmitter

此方法从发射器中删除监听器

// to remove a listener
$emitter->removeListener('cartOnBoot', 'cart_boot');
  • removeAllListeners(string $event_name): IEmitter

此方法从发射器中删除事件的全部监听器

注意:现在您也可以将通配符(正则表达式)作为事件传递!

// to remove a listener
$emitter->removeAllListeners('cartOnBoot');

// to remove a listener with wild card
//
// code below will find all events like
// [cart:boot], [cartOnBoot], etc.
// and remove them all
$emitter->removeAllListeners('cart:?.*');
  • getListener(string $event_name): array

此方法从发射器中获取事件的全部监听器

// to get all listeners of an event
$emitter->getListener('cartOnBoot');
  • getAllListeners($wild_card = null): array

此方法从发射器中获取全部监听器

注意:您可以通过额外的参数 $wild_card(正则表达式)过滤具有其事件的监听器

// to get all listeners
$emitter->getAllListeners();

// to get all events with [cart:boot] and [cart:orders]
$emitter->getAllListeners('cart:(boot|orders)');

许可证

在MIT许可证下。