- is_callable: documentation ( source)
<?php
class DependencyContainer
{
/** @var array */
protected $dependencies;
/**
*
* @param string $key
* @param string $value
*/
public function __set($key, $value)
{
$this->addDependency($key, $value);
}
/**
*
* @param string $name
* @return mixed
*/
public function __get($name)
{
return $this->getDependency($name);
}
/**
*
* @param string $dependency_name
* @param string|callable $implementation
* @throws InvalidArgumentException
*/
public function addDependency($dependency_name, $implementation)
{
if(!is_string($dependency_name))
throw new InvalidArgumentException(
'$dependency_name must be a string! '.gettype($dependency_name).' given!'
);
$this->dependencies[$dependency_name] = $implementation;
}
/**
*
* @param string $dependency_name
* @throws InvalidArgumentException Wird geworfen wenn der erste Parameter kein String ist.
* @throws OutOfRangeException Wird geworfen wenn für die Dependency keine Implementierung gesetzt wurde.
* @return mixed
*/
public function getDependency($dependency_name)
{
if(!is_string($dependency_name))
throw new InvalidArgumentException(
'$dependency_name must be a string! '.gettype($dependency_name).' given!'
);
if(!isset($this->dependencies[$dependency_name]))
throw new OutOfRangeException('No dependency set for '.$dependency_name.'!');
if(is_callable($this->dependencies[$dependency_name]))
{
$function = $this->dependencies[$dependency_name];
return $function($this);
}
else
return new $this->dependencies[$dependency_name]();
}
public function hasDependency($dependency_name)
{
return isset($this->dependencies[$dependency_name]);
}
}
?>