ContainerException::createMessage()
last analyzed

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 1
ccs 0
cts 0
cp 0
nc 1
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Container\Exception;
4
5
use Exception;
6
use Interop\Container\Exception\ContainerException as ContainerExceptionInterface;
7
use RuntimeException;
8
9
/**
10
 * Class ContainerException
11
 *
12
 * @package Venta\Container\Exception
13
 */
14
abstract class ContainerException extends RuntimeException implements ContainerExceptionInterface
15
{
16
    /**
17
     * List of entries referred to cause a circular reference.
18
     *
19
     * @var array
20
     */
21
    private $referenceChain;
22
23
    /**
24
     * Container entry identifier.
25
     *
26
     * @var string
27
     */
28
    private $serviceId;
29
30
    /**
31
     * CircularReferenceException constructor.
32
     *
33
     * @param string $entryId
34
     * @param array $referenceChain
35
     * @param Exception|null $previous
36
     * @internal param string $message
37
     */
38 7
    public function __construct(string $entryId, array $referenceChain = [], Exception $previous = null)
39
    {
40 7
        $this->serviceId = $entryId;
41 7
        $this->referenceChain = $referenceChain;
42 7
        parent::__construct($this->createMessage($previous), 0, $previous);
43 7
    }
44
45
    /**
46
     * Get reference chain.
47
     *
48
     * @return array
49
     */
50 7
    public function referenceChain(): array
51
    {
52 7
        return $this->referenceChain;
53
    }
54
55
    /**
56
     * Get container entry identifier which caused a circular reference error.
57
     *
58
     * @return string
59
     */
60 6
    public function serviceId(): string
61
    {
62 6
        return $this->serviceId;
63
    }
64
65
    /**
66
     * Adds service Ids to the reference chain.
67
     *
68
     * @param string[] ...$serviceId
69
     */
0 ignored issues
show
Documentation introduced by
Should the type for parameter $serviceId not be string[][]?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
70 3
    protected function addToReferenceChain(string ...$serviceId)
71
    {
72 3
        $this->referenceChain = array_merge($this->referenceChain, $serviceId);
73 3
    }
74
75
    /**
76
     * Returns exception message
77
     *
78
     * @param Exception $previous
79
     * @return string
80
     */
81
    abstract protected function createMessage(Exception $previous = null): string;
82
83
}