SingletonTrait   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 40
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getClassDi() 0 3 1
A __construct() 0 2 1
A instance() 0 10 2
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