- is_callable: documentation ( source)
<?php
class DIContainer {
private $properties = array();
public function __set($propertyName, $value) {
$this->properties[$propertyName] = $value;
}
public function __get($propertyName) {
return is_callable($this->properties[$propertyName]) ? $this->properties[$propertyName]() : $this->properties[$propertyName];
}
}
class SessionClass {
public $cookieName;
public function __construct($cookieName) {
$this->cookieName = $cookieName;
}
}
class Application {
public static function run() {
$di = new DIContainer();
$di->sessionCookieName = 'id';
$di->sessionStorageClass = 'SessionClass';
$di->sessionStorage = function ($di) {
$className = $di->sessionStorageClass;
return new $className($di->sessionCookieName);
};
$sessionHandler = $di->sessionStorage;
echo get_class($sessionHandler), "\n", $sessionHandler->cookieName;
}
}
Application::run();