- print_r: documentation ( source)
- is_callable: documentation ( source)
<?php
class DIContainer {
private $properties = [];
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]($this) : $this->properties[$propertyName];
}
}
class DatabaseConnection {
private $username;
private $password;
public function __construct($username, $password) {
echo 'Creating a ' . __CLASS__, "\n";
$this->username = $username;
$this->password = $password;
}
}
$di = new DIContainer();
$di->databaseUsername = 'user';
$di->databasePassword = '123456';
$di->databaseConnectionClass = 'DatabaseConnection';
$di->databaseConnection = function ($di) {
$className = $di->databaseConnectionClass;
return new $className($di->databaseUsername, $di->databasePassword);
};
$db1 = $di->databaseConnection;
print_r($db1);
$db2 = $di->databaseConnection;
print_r($db2);