lucid/signal

事件调度库

v0.0.1 2016-04-12 19:51 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:42:07 UTC


README

Author Source Code Software License

Build Status Code Coverage HHVM

要求

php >= 5.6

安装

$ composer require lucid/signal

用法

<?php

use Lucid\Signal\EventInterface;
use Lucid\Signal\EventDispatcher;

$dispatcher = new EventDispatcher;

$dispatcher->addHandler('my_event', function (EventInterface $event) {
	// do something
});

事件处理器

事件处理器可以是任何可调用的,但必须接受一个 EventInterface 实例作为其第一个参数。

使用实现 HandlerInterface 的处理器时,如果事件被调度,将自动调用处理器的 handleEvent 方法。

<?php

use Lucid\Signal\EventInterface;
use Lucid\Signal\HandlerInterface;
use Lucid\Signal\EventDispatcher;

class MyHandler implements HandlerInterface
{
	public function handleEvent(EventInterface $event)
	{
		// do something
	}
}
<?php

$dispatcher = new EventDispatcher;
$handler = new MyHandler;

$dispatcher->addHandler('my_event', $handler);

my_event 触发时,将调用 MyHandler::handleEvent

事件委派

除非所有处理器都被处理或事件对象被停止,否则事件将依次触发。您可以在处理器中通过调用 $event->stop() 来停止事件委派。

自定义事件

事件对象可以引用消息对象。您可以通过实现 EventInterface 接口或扩展 Event 基类来轻松创建自定义消息对象。

<?php

namespace Acme\Message;

use Lucid\Signal\Event;

class SysMessage extends Event
{
	private $message;

	public function setMessage($message)
	{
		$this->message = $message;
	}

	public function getMessage()
	{
		return $this->message;
	}
}