StandardListenerProvider   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 19
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 19
ccs 11
cts 11
cp 1
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addListener() 0 5 1
A getListenersForEvent() 0 8 4
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