Passed
Branch master (989b89)
by Wanderson
01:21
created

SingletonTrait::getClassDi()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
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(), DependenceInjector irá buscar 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
	 * Diferentes $alias retornam diferentes instâncias
19
	 * @param string $alias
20
	 * @return static
21
	 */
22
	public static function instance($alias = 'default') {
23
		$class = get_called_class();
24
		if (!isset(static::$instance[$class][$alias])) {
25
			$classDi = static::getClassDi();
26
			$instance = new $classDi();
27
			static::$instance[$class][$alias] = $instance;
28
		}
29
		return static::$instance[$class][$alias];
30
	}
31
32
	/**
33
	 * Retorna o nome a classe que deverá ser usada no $instance
34
	 * @return string
35
	 */
36
	protected static function getClassDi() {
37
		return DependenceInjector::getClassDi(get_called_class());
38
	}
39
40
	/**
41
	 * Não se deve usar o construtor de um objeto Singleton
42
	 */
43
	private final function __construct() {
44
		/* its not possible */
45
	}
46
47
}
48