Passed
Branch tests1.5 (af713c)
by Wanderson
01:19
created

SingletonTrait::instance()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Win\DesignPattern;
4
5
/**
6
 * Implementa Design Pattern Singleton
7
 *
8
 * Ao utilizar o método instance(), será buscado no DependenceInjector a classe correspondente
9
 * @see DependenceInjector
10
 * Isso possibilita criar classes extendidas sem comprometer as dependências da classe original
11
 */
12
trait SingletonTrait {
13
14
	protected static $instance = [];
15
16
	/**
17
	 * Retorna a instância da Classe
18
	 *
19
	 * Este método é capaz de retornar uma classe extendida a partir do container em Dependence Injector
20
	 * @param string $alias Com este parâmetro é possível criar múltiplas instâncias
21
	 * @return static
22
	 */
23
	public static function instance($alias = 'default') {
24
		$class = get_called_class();
25
		if (!isset(static::$instance[$class][$alias])):
26
			$classDi = static::getClassDi();
27
			$instance = new $classDi();
28
			static::$instance[$class][$alias] = $instance;
29
		endif;
30
		return static::$instance[$class][$alias];
31
	}
32
33
	/**
34
	 * Retorna o nome a classe que deverá ser usada no $instance
35
	 * @return string
36
	 */
37
	protected static function getClassDi() {
38
		return DependenceInjector::getClassDi(get_called_class());
39
	}
40
41
	/**
42
	 * Não se deve usar o construtor de um objeto Singleton
43
	 */
44
	private final function __construct() {
45
		/* its not possible */
46
	}
47
48
}
49