scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 114  →  ?path2? @ 115
/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php
@@ -0,0 +1,67 @@
<?php
 
/*
* This file is part of Evenement.
*
* (c) Igor Wiedler <igor@wiedler.ch>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
 
namespace Evenement;
 
trait EventEmitterTrait
{
protected $listeners = [];
 
public function on($event, callable $listener)
{
if (!isset($this->listeners[$event])) {
$this->listeners[$event] = [];
}
 
$this->listeners[$event][] = $listener;
}
 
public function once($event, callable $listener)
{
$onceListener = function () use (&$onceListener, $event, $listener) {
$this->removeListener($event, $onceListener);
 
call_user_func_array($listener, func_get_args());
};
 
$this->on($event, $onceListener);
}
 
public function removeListener($event, callable $listener)
{
if (isset($this->listeners[$event])) {
if (false !== $index = array_search($listener, $this->listeners[$event], true)) {
unset($this->listeners[$event][$index]);
}
}
}
 
public function removeAllListeners($event = null)
{
if ($event !== null) {
unset($this->listeners[$event]);
} else {
$this->listeners = [];
}
}
 
public function listeners($event)
{
return isset($this->listeners[$event]) ? $this->listeners[$event] : [];
}
 
public function emit($event, array $arguments = [])
{
foreach ($this->listeners($event) as $listener) {
call_user_func_array($listener, $arguments);
}
}
}