corso https://vola.udemy.com/course/php-mvc-from-scratch/learn/lecture/40931984#overview
filippo.bertilotti
2024-05-15 75438d3b6c46f9566ff7f6a9657dda7cdfbf9a6d
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 }