slince / event-dispatcher
事件分发器包
2.0.0
2018-06-21 10:22 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: ^5.0|^6.0
This package is auto-updated.
Last update: 2024-09-08 19:16:34 UTC
README
安装
通过composer安装。
$ composer require slince/event-dispatcher
使用方法
创建事件分发器
$dispatcher = new Slince\EventDispatcher\Dispatcher();
为指定事件添加监听器
监听器有两种类型:callable
和 Slince\EventDispatcher\Listener
Slince\EventDispatcher\Listener
use Slince\EventDispatcher\ListenerInterface; class FooListener implements ListenerInterface { public function handle(Event $event) { //do something } } $dispatcher->addListener('foo-event-name', new FooListener());
callable
$dispatcher->addListener('foo-event-name', function(Event $event){ //do something });
添加订阅者
use Slince\EventDispatcher\SubscriberInterface; class FooSubscriber implements SubscriberInterface { public static function getSubscribedEvents(Event $event) { return [ 'foo' => 'onFoo', 'bar' => 'onBar' ]; } public function onFoo(Event $event) { //do something } public function onBar(Event $event) { //do something } } $dispatcher->addSubscriber(new FooSubscriber());
将事件分发给已注册的监听器
仅提供事件名称。
$dispatcher->dispatch('foo-event-name');
您也可以使用事件实例进行分发。
$dispatcher->dispatch(new Event('foo-event-name'));
传播
您可以在事件实例上调用 stopPropagation
来停止事件传播。
$dispatcher->addListener('foo-event-name', function(Event $event){ $event->stopPropagation(); }); $emitter->addListener('foo-event-name', function ($event) { // This will not be triggered }); $dispatcher->dispatch('foo-event-name');
检查是否停止了传播
$event = new Event('foo-event-name'); $dispatcher->dispatch($event); $event->isPropagationStopped();
许可证
MIT许可证。请参阅 MIT