<?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('object', new class(42) {
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function value()
{
return $this->value;
}
});
$object = $container->get('object');
var_dump($object->value());
Deprecated: Creation of dynamic property Container::$item is deprecated in /in/5UhBZ on line 29
int(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/5UhBZ on line 29
int(42)