Просмотр поста

.
Delphinum
Задача:
Контейнер с возможностью использования фабрик.

Реализация:
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);