- var_dump: documentation ( source)
- class_exists: documentation ( source)
- is_callable: documentation ( source)
<?php
class Request {
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>, <shared>) to set it.");
}
return $this->definitions[$name];
}
public function get($name) {
$definition = $this->getRaw($name);
echo is_callable($definition) ? 'Callable def' : 'Non-calleable def';
echo class_exists($definition) ? 'Class' : 'non-class';
die;
return $definition();
}
}
$di = new DI();
//Using an anonymous function
$di->set('request1', function(){
return new Request();
});
//Using an anonymous function
$di->set('request2', 'Request');
var_dump($di->get('request1'));