commit | author | age
|
2bddb6
|
1 |
<?php |
F |
2 |
|
|
3 |
namespace Framework; |
|
4 |
use ReflectionClass; |
75438d
|
5 |
use Closure; |
2bddb6
|
6 |
|
F |
7 |
class Container { |
95ec24
|
8 |
|
F |
9 |
private array $registry = []; |
|
10 |
|
75438d
|
11 |
public function set(string $name, Closure $value): void { |
95ec24
|
12 |
$this->registry[$name] = $value; |
F |
13 |
} |
75438d
|
14 |
public function get(string $class_name): object { |
95ec24
|
15 |
if(array_key_exists($class_name, $this->registry)) { |
75438d
|
16 |
return $this->registry[$class_name](); |
95ec24
|
17 |
} |
2bddb6
|
18 |
$reflector = new ReflectionClass($class_name); |
F |
19 |
$contructor = $reflector->getConstructor(); |
|
20 |
|
|
21 |
$dependencies = []; |
|
22 |
|
|
23 |
if($contructor === null) { |
|
24 |
return new $class_name(); |
|
25 |
} |
|
26 |
|
|
27 |
foreach($contructor->getParameters() as $param) { |
|
28 |
$type = (string) $param->getType(); |
|
29 |
$dependencies[] = $this->get($type); |
|
30 |
} |
|
31 |
|
|
32 |
return new $class_name(...$dependencies); |
|
33 |
} |
|
34 |
} |