-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEmitter.php
36 lines (30 loc) · 852 Bytes
/
Emitter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
/**
* @link https://github.com/ryanve/traits
*/
namespace traits;
trait Emitter {
protected $listeners = [];
function listeners($name) {
return empty($this->listeners[$name]) ? [] : $this->listeners[$name];
}
function on($name, $fn) {
empty($this->listeners[$name]) ? $this->listeners[$name] = [$fn] : $this->listeners[$name][] = $fn;
return $this;
}
function off($name = null, $fn = null) {
if (!func_num_args()) $this->listeners = [];
elseif (!empty($this->listeners[$name]))
$this->listeners[$name] = null === $fn ? null : array_diff($this->listeners[$name], [$fn]);
return $this;
}
function emit($name) {
$i = 0;
foreach ($this->listeners($name) as $fn) ++$i and call_user_func($fn);
return $i;
}
function trigger($name) {
$this->emit($name);
return $this;
}
}