DomainEventPublisher::publish()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Shared Kernel library.
5
 *
6
 * Copyright (c) 2016-present LIN3S <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace LIN3S\SharedKernel\Domain\Event;
15
16
use LIN3S\SharedKernel\Domain\Model\DomainEvent;
17
18
/**
19
 * @author Beñat Espiña <[email protected]>
20
 */
21
final class DomainEventPublisher
22
{
23
    private static $instance;
24
25
    private $subscribers;
26
27
    private function __construct()
28
    {
29
        $this->subscribers = [];
30
    }
31
32
    public function __clone()
33
    {
34
        throw new DomainEventPublisherCloningIsNotAllowed();
35
    }
36
37
    public static function instance() : self
38
    {
39
        if (null === static::$instance) {
0 ignored issues
show
Comprehensibility introduced by
Since LIN3S\SharedKernel\Domai...nt\DomainEventPublisher is declared final, using late-static binding will have no effect. You might want to replace static with self instead.

Late static binding only has effect in subclasses. A final class cannot be extended anymore so late static binding cannot occurr. Consider replacing static:: with self::.

To learn more about late static binding, please refer to the PHP core documentation.

Loading history...
40
            static::$instance = new self();
0 ignored issues
show
Comprehensibility introduced by
Since LIN3S\SharedKernel\Domai...nt\DomainEventPublisher is declared final, using late-static binding will have no effect. You might want to replace static with self instead.

Late static binding only has effect in subclasses. A final class cannot be extended anymore so late static binding cannot occurr. Consider replacing static:: with self::.

To learn more about late static binding, please refer to the PHP core documentation.

Loading history...
41
        }
42
43
        return static::$instance;
0 ignored issues
show
Comprehensibility introduced by
Since LIN3S\SharedKernel\Domai...nt\DomainEventPublisher is declared final, using late-static binding will have no effect. You might want to replace static with self instead.

Late static binding only has effect in subclasses. A final class cannot be extended anymore so late static binding cannot occurr. Consider replacing static:: with self::.

To learn more about late static binding, please refer to the PHP core documentation.

Loading history...
44
    }
45
46
    public function subscriberOfClassName(string $className) : DomainEventSubscriber
47
    {
48
        return $this->subscribers[$className];
49
    }
50
51
    public function subscribe(DomainEventSubscriber $domainEventSubscriber) : void
52
    {
53
        $this->subscribers[get_class($domainEventSubscriber)] = $domainEventSubscriber;
54
    }
55
56
    public function publish(DomainEvent $domainEvent) : void
57
    {
58
        foreach ($this->subscribers as $subscriber) {
59
            if ($subscriber->isSubscribedTo($domainEvent)) {
60
                $subscriber->handle($domainEvent);
61
            }
62
        }
63
    }
64
}
65