EventManager::attach()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 7
ccs 6
cts 6
cp 1
rs 9.4285
cc 2
eloc 4
nc 2
nop 3
crap 2
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