Passed
Pull Request — master (#21)
by Wanderson
03:27
created

DependenceInjector::getClassDi()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Win\Common;
4
5
use ReflectionClass;
6
7
/**
8
 * Dependence Injector
9
 * 
10
 * Se há um apelido para a classe dentro de $container,
11
 * então ela será utilizada ao invés da classe original.
12
 */
13
class DependenceInjector
14
{
15
	/**
16
	 * Armazena os nomes de classes
17
	 * @var string[]
18
	 */
19
	public static $container = [];
20
21
	/**
22
	 * Cria a classe, injetando as dependências
23
	 * @param string $class
24
	 * @return object
25
	 */
26
	public static function make(string $class)
27
	{
28
		$args = [];
29
		$class = static::$container[$class] ?? $class;
30
		$con = (new ReflectionClass($class))->getConstructor();
31
32
		if (!is_null($con)) {
33
			foreach ($con->getParameters() as $param) {
34
				$args[] = static::make($param->getType());
35
			}
36
		}
37
38
		return new $class(...$args);
39
	}
40
}
41