mmdm / sim-event-dispatcher
一个简单而优雅的事件分发器
v2.0.0
2021-04-02 19:11 UTC
Requires
- php: >=7.2
- ext-json: *
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许可证下。