Event Dispatcher
, (*1)
Installation
Install via composer., (*2)
$ composer require slince/event-dispatcher
Usage
Creates a event dispatcher
$dispatcher = new Slince\EventDispatcher\Dispatcher();
Adds a listener for the specified event
There are two types of listeners: callable and Slince\EventDispatcher\Listener, (*3)
- 
Slince\EventDispatcher\Listener  
use Slince\EventDispatcher\ListenerInterface;
class FooListener implements ListenerInterface
{
     public function handle(Event $event)
     {
         //do something
     }
}
$dispatcher->addListener('foo-event-name', new FooListener());
$dispatcher->addListener('foo-event-name', function(Event $event){
    //do something
});
Add a subscriber
use Slince\EventDispatcher\SubscriberInterface;
class FooSubscriber implements SubscriberInterface
{
     public static function getSubscribedEvents(Event $event)
     {
        return [
            'foo' => 'onFoo',
            'bar' => 'onBar'
        ];
     }
    public function onFoo(Event $event)
    {
      //do something
    }
    public function onBar(Event $event)
    {
       //do something
    }
}
$dispatcher->addSubscriber(new FooSubscriber());
Dispatches the event to the registered listeners
Just provides the event name., (*4)
$dispatcher->dispatch('foo-event-name');
You can also dispatch with an event instance., (*5)
$dispatcher->dispatch(new Event('foo-event-name'));
Propagation
You can call stopPropagation to stop event propagation on the event instance., (*6)
$dispatcher->addListener('foo-event-name', function(Event $event){
    $event->stopPropagation();
});
$emitter->addListener('foo-event-name', function ($event) {
    // This will not be triggered
});
$dispatcher->dispatch('foo-event-name');
Checks whether propagation is stopped, (*7)
```php
 $event = new Event('foo-event-name');
 $dispatcher->dispatch($event);, (*8)
$event->isPropagationStopped();
 ```, (*9)
### License, (*10)
The MIT license. See MIT, (*11)