EventManager::trigger()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 12
ccs 10
cts 10
cp 1
rs 9.4285
cc 3
eloc 7
nc 3
nop 2
crap 3
1
<?php
2
namespace FastEventManager;
3
4
use SplPriorityQueue;
5
6
class EventManager
7
{
8
    /**
9
     * @var SplPriorityQueue[]
10
     */
11
    private $listeners = [];
12
13 38
    public function attach($name, callable $callable, $priority = 0)
14
    {
15 38
        if (!isset($this->listeners[$name])) {
16 38
            $this->listeners[$name] = new SplPriorityQueue();
17 19
        }
18 38
        $this->listeners[$name]->insert($callable, $priority);
19 38
    }
20
21 30
    public function trigger($regex, ...$args)
22
    {
23 30
        $events = array_keys($this->listeners);
24 30
        $eventsMatched = preg_grep($regex, $events);
25 30
        foreach ($eventsMatched as $event) {
26
            /* @var $listenersQueue SplPriorityQueue */
27 26
            $listenersQueue = $this->listeners[$event];
28 26
            foreach ($listenersQueue as $listener) {
29 26
                call_user_func($listener, $args);
30 13
            }
31 14
        }
32 28
    }
33
}
34