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
});Eventhandlers can be any callable but must accept an instance of EventInterface
as their first argument.
Using handlers the implement the HandlerInterface will automatically call the handleEvent method on the handler if the event is dispatched.
<?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);MyHandler::handleEvent will now be called when my_event is fired.
Events are fired subsequentially unless all handlers where adressed or until
the Event object is being stopped. You can stop the eventdelegation in your
handler by calling $event->stop().
Event objects can be referred to message objects. You can easily create your
custom message objects by implementing the EventInterface interface or
extending the Event base class.
<?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;
}
}