<?php
class Container {
protected $items;
public function __construct()
{
$this->items = [];
}
public function exists($name)
{
return isset($this->item[$name]);
}
public function get($name)
{
if (!isset($this->item[$name])) {
throw new RuntimeException('Item "' . $name . '" not found');
}
return $this->item[$name];
}
public function register($name, $item, $replace = false)
{
if (isset($this->item[$name]) and $replace === false) {
throw new RuntimeException('Item "' . $name . '" already exists');
}
$this->item[$name] = $item;
return $this;
}
public function unregister($name)
{
if (!isset($this->item[$name])) {
throw new RuntimeException('Item "' . $name . '" not found');
}
unset($this->item[$name]);
}
}
$container = new Container();
$container->register('ultimate.question', new class(42) {
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function value()
{
return $this->value;
}
});
;
if ($container->exists('ultimate.question')) {
$answer = $container->get('ultimate.question');
echo "The answer is: ", $answer->value(), "\n";
$container->unregister('ultimate.question');
} else {
echo "Come back in 7,500,000 years\n";
}
Deprecated: Creation of dynamic property Container::$item is deprecated in /in/dheuo on line 29
The answer is: 42
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Deprecated: Creation of dynamic property Container::$item is deprecated in /in/dheuo on line 29
The answer is: 42