1 | <?php |
||
8 | trait EventEmitterTrait |
||
9 | { |
||
10 | private $listeners = []; |
||
11 | |||
12 | /** |
||
13 | * @param string $eventName |
||
14 | * @param callable $listener |
||
15 | */ |
||
16 | 7 | public function addListener($eventName, callable $listener) |
|
24 | |||
25 | /** |
||
26 | * @param string $eventName |
||
27 | * @param callable $listener |
||
28 | */ |
||
29 | 1 | public function removeListener($eventName, callable $listener) |
|
30 | { |
||
31 | 1 | if (isset($this->listeners[$eventName])) { |
|
32 | 1 | if (false !== $index = array_search($listener, $this->listeners[$eventName], true)) { |
|
33 | 1 | unset($this->listeners[$eventName][$index]); |
|
34 | } |
||
35 | } |
||
36 | 1 | } |
|
37 | |||
38 | /** |
||
39 | * @param string|null $eventName |
||
40 | */ |
||
41 | 2 | public function removeAllListeners($eventName = null) |
|
42 | { |
||
43 | 2 | if ($eventName !== null) { |
|
44 | 1 | unset($this->listeners[$eventName]); |
|
45 | } else { |
||
46 | 1 | $this->listeners = []; |
|
47 | } |
||
48 | 2 | } |
|
49 | |||
50 | /** |
||
51 | * @param string $eventName |
||
52 | * @param Event $event |
||
53 | */ |
||
54 | 2 | public function emit($eventName, Event $event = null) |
|
55 | { |
||
56 | 2 | if (empty($this->listeners($eventName))) { |
|
57 | 1 | return; |
|
58 | } |
||
59 | |||
60 | 1 | $event = $event ?: new Event(); |
|
61 | 1 | $event->name = $eventName; |
|
62 | 1 | $event->handled = false; |
|
63 | |||
64 | 1 | $this->runListeners($eventName, $event); |
|
65 | 1 | } |
|
66 | |||
67 | /** |
||
68 | * @param string $eventName |
||
69 | * @return array |
||
70 | */ |
||
71 | 7 | public function listeners($eventName) |
|
75 | |||
76 | /** |
||
77 | * @param string $eventName |
||
78 | * @param Event $event |
||
79 | */ |
||
80 | 1 | private function runListeners($eventName, Event $event) |
|
89 | } |
||
90 |