/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); |
} |
} |
} |