mepihindeveloper / php-event-dispatcher
事件处理组件
v1.0.0
2022-02-22 07:59 UTC
Requires
- php: >=7.4
- psr/event-dispatcher: ^1.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
This package is auto-updated.
Last update: 2024-09-22 13:46:17 UTC
README
用于处理事件和监听者的组件
结构
src/
--- exceptions/
------ EventNotFoundException.php
------ ListenerNotFoundException
--- interfaces/
------ ListenerInterface.php
--- Event.php
--- EventDispatcher.php
--- ListenerProvider.php
在interfaces目录中存储必要的接口,这些接口需要在实现自己的Listener类时实现。Listener类作为事件监听者,必须实现process方法。在exceptions目录中存储必要的异常。异常EventNotFoundException用于识别事件查找错误(当事件未找到时),同样ListenerNotFoundException也是如此。
Event类实现了事件本身。自定义事件应该继承自Event类。
EventDispatcher类实现了事件调度器,它通过ListenerProvider作为中介来工作。
ListenerProvider类实现了监听者提供者,其中进行所有与监听者和事件相关的操作。
事件和监听者的示例实现
<?php declare(strict_types = 1); use mepihindeveloper\components\Event; use mepihindeveloper\components\EventDispatcher; use mepihindeveloper\components\interfaces\ListenerInterface; use mepihindeveloper\components\ListenerProvider; use Psr\EventDispatcher\StoppableEventInterface; require_once __DIR__ . '/vendor/autoload.php'; class Event1 extends Event { } class Event2 extends Event { } class Event1Listener1 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class Event2Listener1 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class Event2Listener2 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class AllEventsListener implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } $event1 = new Event1; $event2 = new Event2; $event1Listener1 = new Event1Listener1; $event2Listener1 = new Event2Listener1; $event2Listener2 = new Event2Listener2; $allEventsListener = new AllEventsListener; $listenerProvider = new ListenerProvider; $listenerProvider ->addListenerForEventType($event1Listener1, Event1::class) ->addListenerForEventType($event2Listener1, Event2::class) ->addListenerForEventType($event2Listener2, Event2::class) ->addListenerForEventType($allEventsListener); $dispatcher = new EventDispatcher($listenerProvider); $dispatcher->dispatch($event1); $dispatcher->dispatch($event2);
可用方法
Event
EventDispatcher
ListenerProvider
联系方式
您可以通过以下链接在我的社交网络VKontakte上联系我:VKontakte: Максим Епихин
如果您喜欢通过电子邮件交流,可以使用以下邮箱地址:mepihindeveloper@gmail.com
我在YouTube上的频道,专注于开发网页和游戏项目:YouTube: Максим Епихин
您可以通过以下链接支持我,通过Яндекс.Деньги转账:转账