<?php
class Request {
public $answer = 42;
public function __construct() {
echo 'Request created', PHP_EOL;
}
}
class DI {
protected $shared = [];
protected $definitions = [];
public function __construct() {}
public function set($name, $definition, $shared = false) {
if($shared) {
if(isset($shared[$name])) {
throw new Exception("Definition '$name' is already set. Use DI::remove('$name') to remove it.");
}
$this->shared[$name] = $definition;
} else {
if(isset($definitions[$name])) {
throw new Exception("Definition '$name' is already set. Use DI::remove('$name') to remove it.");
}
$this->definitions[$name] = $definition;
}
}
public function getRaw($name) {
if(!isset($this->definitions[$name])) {
throw new Exception("Definition '$name' is not set. Use DI::set('$name', <definition>) to set it.");
}
return $this->definitions[$name];
}
public function get($name) {
$definition = $this->getRaw($name);
if(is_callable($definition)) return $definition();
if(class_exists($definition)) return new $definition();
}
public function getShared($name) {
if(!isset($this->shared[$name])) {
throw new Exception("Shared definition '$name' is not set. Use DI::set('$name', <definition>, true) to set it.");
}
$shared = $this->shared[$name];
if(is_callable($shared)) $this->shared[$name] = $shared();
else if(is_string($shared) && class_exists($shared)) $this->shared[$name] = new $shared();
return $this->shared[$name];
}
}
$di = new DI();
//Using an anonymous function
$di->set('request1', function(){
return new Request();
});
//Using an anonymous function
$di->set('request2', 'Request', true);
$request = $di->getShared('request2');
$request->answer = 5;
var_dump($di->getShared('request2'));
$request = $di->get('request1');
$request->answer = 5;
var_dump($di->get('request1'));
Parse error: syntax error, unexpected '[' in /in/ZW1P4 on line 11
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected '[' in /in/ZW1P4 on line 11
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/ZW1P4 on line 4
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/ZW1P4 on line 4
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/ZW1P4 on line 4
Process exited with code 255.