/
Container.php
38 lines (33 loc) · 1.07 KB
/
Container.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
namespace App;
class Container
{
private array $services = [];
public function register($itemName)
{
$this->services[$itemName] = $itemName;
}
public function make($itemName)
{
if (isset($this->services[$itemName])) {
$className = $this->services[$itemName];
return $this->resolveClass($className);
}
throw new \InvalidArgumentException("Item with $itemName not found");
}
private function resolveClass($className)
{
$reflectionClass = new \ReflectionClass($className);
if ($reflectionClass->isInstantiable() === false) {
throw new \InvalidArgumentException("Can't create $className.Not instantiable");
}
$constructorReflection = $reflectionClass->getConstructor();
if ($constructorReflection === null) {
return new $className;
}
if ($constructorReflection->getNumberOfParameters() === 0) {
return new $className;
}
throw new \InvalidArgumentException("Can't create $className");
}
}