62 lines
1.5 KiB
PHP
62 lines
1.5 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of the Peast package
|
|
*
|
|
* (c) Marco Marchiò <marco.mm89@gmail.com>
|
|
*
|
|
* For the full copyright and license information refer to the LICENSE file
|
|
* distributed with this source code
|
|
*/
|
|
namespace Peast\Syntax;
|
|
|
|
/**
|
|
* Events emitter class. An instance of this class is used by Parser and Scanner
|
|
* to emit events and attach listeners to them
|
|
*
|
|
* @author Marco Marchiò <marco.mm89@gmail.com>
|
|
*/
|
|
class EventsEmitter
|
|
{
|
|
/**
|
|
* Events registry array
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $eventsRegistry = array();
|
|
|
|
/**
|
|
* Attaches a listener function to the given event
|
|
*
|
|
* @param string $event Event name
|
|
* @param callable $listener Listener function
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function addListener($event, $listener)
|
|
{
|
|
if (!isset($this->eventsRegistry[$event])) {
|
|
$this->eventsRegistry[$event] = array();
|
|
}
|
|
$this->eventsRegistry[$event][] = $listener;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Fires an event
|
|
*
|
|
* @param string $event Event name
|
|
* @param array $args Arguments to pass to functions attached to the
|
|
* event
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function fire($event, $args = array())
|
|
{
|
|
if (isset($this->eventsRegistry[$event])) {
|
|
foreach ($this->eventsRegistry[$event] as $listener) {
|
|
call_user_func_array($listener, $args);
|
|
}
|
|
}
|
|
return $this;
|
|
}
|
|
} |