yarcode / simple-events
PHP 简单事件分发库
1.1
2018-10-16 08:42 UTC
Requires
- php: ^7
Requires (Dev)
- phpunit/phpunit: ~6
This package is not auto-updated.
Last update: 2024-09-14 19:20:17 UTC
README
PHP 简单事件分发库
安装
Composer
安装此扩展的首选方法是使用 Composer。
运行以下命令之一
composer require yarcode/simple-events
或添加以下内容到您的 composer.json
文件的 require 部分
"yarcode/simple-events": "*"
to the require section of your composer.json
使用方法
通过 EventEmitterTrait
将 \YarCode\Events\EventEmitterTrait
添加到您的类中,使其成为 EventEmitter
class MyClass { use \YarCode\Events\EventEmitterTrait; ... } $emitter = new MyClass();
独立的 EventEmitter
或创建一个 \YarCode\Events\EventEmitter
的实例。
$emitter = new \YarCode\Events\EventEmitter();
添加监听器
您可以添加任何字符串事件名的 callable
监听器。
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted";
});
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted one more time";
});
触发事件
您可以使用默认事件对象触发命名事件。
$emitter->emit('TestEvent'); // TestEvent was emitted // TestEvent was emitted one more time
或者您可以将 \YarCode\Events\Event
对象传递给监听器。
$event = new \YarCode\Events\Event(); $event->payload['key'] = 'value'; $emitter->emit('TestEvent', $event); // TestEvent was emitted // TestEvent was emitted one more time
您可以将任何数据作为事件负载传递。它将被作为第一个参数传递给监听器可调用函数。
$data = ['foo', 'bar']; $emitter->emit('MixedDataEvent', $data);
移除监听器
您可以移除一个具体的监听器。
$callback = function (\YarCode\Events\Event $event) {
echo "{$event->name} was emitted third time";
});
$emitter->addListener('TestEvent', $callback);
$emitter->removeListener('TestEvent', $callback);
或移除事件的所有监听器。
$emitter->removeAllListeners('TestEvent');
或移除所有事件的所有监听器。
$emitter->removeAllListeners();
中断执行
将 $event->handled
属性设置为 true
以停止进一步监听器执行。
$emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) { $event->handled = true; }); $emitter->addListener('TestEvent', function (\YarCode\Events\Event $event) { echo "This callback for {$event->name} would never run"; }); $emitter->emit('TestEvent');
从监听器访问发射器
发射器对象作为监听器的第二个参数传递。
$emitter->addListener('TestEmitterAccessEvent', function ($data, $emitter) { echo "Hello"; $emitter->emit('TestEmitterAccessEvent2', $data); }); $emitter->addListener('TestEmitterAccessEvent2', function ($data) { echo " World"; }); $emitter->emit('TestEmitterAccessEvent'); // Hello World
许可证
MIT