yarcode/simple-events

PHP 简单事件分发库

1.1 2018-10-16 08:42 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:17 UTC


README

PHP 简单事件分发库

SensioLabsInsight

Scrutinizer Code Quality Code Coverage Build Status GitHub license

安装

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

链接