brick/event

事件分发库

0.1.1 2019-12-03 11:40 UTC

This package is auto-updated.

Last update: 2024-09-03 00:02:15 UTC


README

一个简单的事件分发机制。

Build Status Coverage Status Latest Stable Version License

简介

这个库通过将外部监听器插入到应用程序分发的事件中,帮助编写可扩展的软件。

安装

此库可以通过Composer安装。

composer require brick/event

要求

此库需要PHP 7.1或更高版本。

概述

此包提供了EventDispatcher。分发器分发事件:事件是一个独特的字符串,可以带有可选的参数。事件被监听器拦截:任何callable都可以作为事件监听器。

基本用法

让我们实例化一个分发器

use Brick\Event\EventDispatcher;

$dispatcher = new EventDispatcher();

并添加一些监听器

$dispatcher->addListener('startup', function() {
    echo 'Caught startup event';
});

$dispatcher->addListener('shutdown', function() {
    echo 'Caught shutdown event';
});

现在,让我们分发一些事件

$dispatcher->dispatch('startup'); // will display "Caught startup event"
$dispatcher->dispatch('shutdown'); // will display "Caught shutdown event"

您传递给dispatch()的任何附加参数都将转发给监听器

$dispatcher->addListener('test', function($a, $b) {
    echo "Caught $a and $b";
});

$dispatcher->dispatch('test', 'Hello', 'World'); // will display "Caught Hello and World"

设置优先级

默认情况下,监听器按注册顺序调用。可以通过传递给addListener()的优先级来绕过这种自然顺序

$dispatcher->addListener('startup', function() { ... }, 10);

默认优先级是0。具有最高优先级的监听器将首先在链中调用。具有相同优先级的两个监听器将按注册顺序调用。

停止事件传播

任何监听器都可以决定事件不应传播到链中的其他监听器,通过返回false

$dispatcher->addListener('startup', function() {
    // ...

    return false;
});

然后分发器将断开链,不会为该事件调用其他监听器。