- Output for 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
- Fatal error: Uncaught Error: Interface "ContainerExceptionInterface" not found in /in/rcZVi:3
Stack trace:
#0 {main}
thrown in /in/rcZVi on line 3
Process exited with code 255.
<?php
class AttemptingToRegisterServiceUsingBusyName extends Exception implements ContainerExceptionInterface{}
class AttemptToObtainOrCreateUnregisteredService extends Exception implements NotFoundExceptionInterface{}
class DIContainer implements ContainerInterface
{
private array $registered = [];
private array $created = [];
public function register(string $id, callable $factory): void
{
if ($this->has($id)) {
throw new AttemptingToRegisterServiceUsingBusyName('Сервис с таким именем уже зарегистрирован.');
}
$this->registered[$id] = $factory;
}
public function get(string $id): mixed
{
if (array_key_exists($id, $this->created)) {
return $this->created[$id];
} elseif ($this->has($id)) {
$object = call_user_func($this->registered[$id], $this);
$this->created[$id] = $object;
return $object;
} else {
throw new AttemptToObtainOrCreateUnregisteredService('Сервис с таким именем не зарегистрирован.');
}
}
public function has(string $id): bool
{
return isset($this->registered[$id]);
}
}