Completed
Push — 5.0 ( 9430f0...7305a8 )
by Marc André
03:05 queued 01:41
created

src/Singletons.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
4
/**
5
 *
6
 * Copyright (c) 2010-2018 Nevraxe inc. & Marc André Audet <[email protected]>. All rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without modification, are
9
 * permitted provided that the following conditions are met:
10
 *
11
 *   1. Redistributions of source code must retain the above copyright notice, this list of
12
 *       conditions and the following disclaimer.
13
 *
14
 *   2. Redistributions in binary form must reproduce the above copyright notice, this list
15
 *       of conditions and the following disclaimer in the documentation and/or other materials
16
 *       provided with the distribution.
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
 * DISCLAIMED. IN NO EVENT SHALL NEVRAXE INC. & MARC ANDRÉ AUDET BE LIABLE FOR ANY
22
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 */
30
31
32
namespace Cervo;
33
34
35
use Cervo\Exceptions\Singletons\InvalidClassException;
36
use Cervo\Interfaces\SingletonInterface;
37
38
39
/**
40
 * Singletons manager for Cervo.
41
 *
42
 * @author Marc André Audet <[email protected]>
43
 */
44
final class Singletons
45
{
46
    private $objects = [];
47
48
    private $context;
49
50
    public function __construct(Context $context)
51
    {
52
        $this->context = $context;
53
    }
54
55
    public function get(string $class_name) : SingletonInterface
56
    {
57
        if (is_object($this->objects[$class_name])) {
58
            return $this->objects[$class_name];
59
        }
60
61
        if (!is_subclass_of($class_name, SingletonInterface::class)) {
0 ignored issues
show
Due to PHP Bug #53727, is_subclass_of might return inconsistent results on some PHP versions if \Cervo\Interfaces\SingletonInterface::class can be an interface. If so, you could instead use ReflectionClass::implementsInterface.
Loading history...
62
            throw new InvalidClassException();
63
        }
64
65
        return ($this->objects[$class_name] = new $class_name($this->context));
66
    }
67
}
68