SingletonTrait::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Win\Common\Traits;
4
5
use Win\Common\DependenceInjector;
6
7
/**
8
 * Implementa Design Pattern Singleton
9
 *
10
 * Ao utilizar o método instance(), DependenceInjector irá buscar a classe correspondente
11
 * @see DependenceInjector
12
 * Isso possibilita criar sub-classes sem comprometer as dependências da classe original
13
 */
14
trait SingletonTrait
15
{
16
	/**
17
	 * Array com todas as instâncias
18
	 * @var array
19
	 */
20
	protected static $instance = [];
21
22
	/**
23
	 * Retorna a instância da Classe
24
	 * Diferentes $alias retornam diferentes instâncias
25
	 * @param string $alias
26
	 * @return static
27
	 */
28
	public static function instance($alias = 'default')
29
	{
30
		$class = get_called_class();
31
		if (!isset(static::$instance[$class][$alias])) {
32
			$classDi = static::getClassDi();
33
			$instance = new $classDi();
34
			static::$instance[$class][$alias] = $instance;
35
		}
36
37
		return static::$instance[$class][$alias];
38
	}
39
40
	/**
41
	 * Retorna o nome a classe que deverá ser usada no $instance
42
	 * @return string
43
	 */
44
	protected static function getClassDi()
45
	{
46
		return DependenceInjector::getClassDi(get_called_class());
47
	}
48
49
	/**
50
	 * Não se deve usar o construtor de um objeto Singleton
51
	 */
52
	final private function __construct()
53
	{
54
		/* its not possible */
55
	}
56
}
57