Контейнер с возможностью использования фабрик.
Реализация:
function container($name, $value = null){
static $container;
if(is_null($value)){
return $container[$name];
}
$container[$name] = $value;
}
Установка сервиса в контейнер:
container('config', [
'db' => 'user:pass@localhost:8000'
]);
Запрос сервиса из контейнера:
$config = container('config');
Установка и использование фабрики:
container('PDO', function(array $config){
$config = $config['db'];
return new PDO($config['driver'] . ':dbname=' . $config['name'], $config['user'], $config['password']);
});
$pdo = call_user_func(container('PDO'), container('config'));
Шаринг:
...
$pdo = call_user_func(container('PDO'), container('config'));
container('PDO', $pdo);