StandardListenerProvider::getListenersForEvent()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 5
nc 4
nop 1
dl 0
loc 8
ccs 6
cts 6
cp 1
crap 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Nexus;
6
7
use Psr\EventDispatcher\EventInterface;
8
use Psr\EventDispatcher\ListenerProviderInterface;
9
10
class StandardListenerProvider implements ListenerProviderInterface
11
{
12
    private $listeners = [];
13
14 7
    public function addListener(callable $listener): void
15
    {
16 7
        $reflection = new \ReflectionFunction($listener);
17 7
        $eventClass = $reflection->getParameters()[0]->getType()->getName();
18 7
        $this->listeners[$eventClass][] = $listener;
19 7
    }
20
21 8
    public function getListenersForEvent(EventInterface $event): iterable
22
    {
23 8
        $eventClass = get_class($event);
24 8
        if (empty($this->listeners[$eventClass]) || !is_array($this->listeners[$eventClass])) {
25 1
            $this->listeners[$eventClass] = [];
26
        }
27 8
        foreach ($this->listeners[$eventClass] as $listener) {
28 7
            yield $listener;
29
        }
30 6
    }
31
}
32