-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContainer.php
More file actions
127 lines (111 loc) · 2.32 KB
/
Copy pathContainer.php
File metadata and controls
127 lines (111 loc) · 2.32 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace Hackphp\Container;
use Closure;
use Psr\Container\ContainerInterface;
class Container implements ContainerInterface
{
use Resolver;
/**
* Container instance.
*
* @var static
*/
protected static $instance;
/**
* The binded services.
*
* @var array
*/
protected array $bindings = [];
/**
* The shared services.
*
* @var array
*/
protected array $instances = [];
/**
* Enable/Disable autowiring.
*
* @var bool
*/
protected bool $autowiring = true;
/**
* Prevent create new instance.
*/
private function __construct()
{
}
/**
* Get the Container instance.
*
* @return static
*/
public static function getInstance(): self
{
if (is_null(static::$instance)) {
static::$instance = new static();
}
return static::$instance;
}
/**
* @inheritDoc
*/
public function get(string $id)
{
return $this->make($id);
}
/**
* @inheritDoc
*/
public function has(string $id): bool
{
return isset($this->bindings[$id]) || isset($this->instances[$id]);
}
/**
* Bind entry to the container.
*
* @param string $name
* @param Closure|string|null $entry
* @param bool $shared
* @return void
*/
public function bind(string $name, $entry = null, bool $shared = false): void
{
$this->bindings[$name] = [
"entry" => $entry,
"shared" => $shared
];
}
/**
* Buind entry to the container as singleton.
*
* @param string $name
* @param Closure|string|null $entry
* @return void
*/
public function singleton(string $name, $entry = null): void
{
$this->bind($name, $entry, true);
}
/**
* Bind entry to the container shared instances.
*
* @param string $name
* @param mixed $entry
* @return void
*/
public function instance(string $name, $entry): void
{
$this->instances[$name] = $entry;
}
/**
* Get the entry from the container.
*
* @param string $name
* @return mixed
*/
public function make(string $name)
{
return $this->resolve($name);
}
}