Pesy: PHP事件系统

v1.0 2016-03-26 22:17 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:59:02 UTC


README

这是一个事件系统,允许您广播由不同于发射器处理的不同实体的事件。

路径

路径可以是唯一的,例如 "myPath:extra:thing",也可以包含通配符 * 来表示它处理任何子事件路径,如 another:path:* 的情况,它将处理所有子路径,如 another:path:like:this,但 它不会处理 路径如 another:path

初始化

创建一个处理器中心。它将是处理器的主要持有者。技术上,任何EventHandlerList都可以...

$handlersCentre = HandlersCentre::getWithHandlers(array(
    'TextFileDump' => new TextFileDumpSampleHandler(array("sample:*")),
    'OtherTextFileDump' => new TextFileDumpSampleHandler(array("another:path:*"))
));

一旦您有了处理器中心或您的列表,您就可以创建您的发射器,它将向通过参数传递的处理器列表中的注册处理器发射。

$eventEmitter = new EventEmitter($handlersCentre->getList());

现在,在您的代码中任何地方,您都可以创建一个事件并广播它。如果事件的路径由任何处理器处理,它将被处理。否则,它将被忽略。

$e = new TestEvent();
$e->setPath("sample:path");
$e->addData("key1", "value1");
$e->addData("key2", array(1,2,3));
$eventEmitter->broadcast($e);

这不会被处理,因为没有处理器在监听这个路径 wontBeHandled

$e = new TestEvent();
$e->setPath("wontBeHandled");
$e->addData("wontAppear", "in text file");
$eventEmitter->broadcast($e);

如前所述,这将被 OtherTextFileDump 处理器处理。

$e = new TestEvent();
$e->setPath("another:path:like:this");
$e->addData("will appear", "in text file");
$eventEmitter->broadcast($e);

联系

您可以通过我的twitter与我联系: @miguelsaddress