Минимум: Локатор служб

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

Реализация:
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);
.
нет проверки на существование индекса
.
ramzes, это для минимализма. Можно конечно добавить проверку и выбрасывать исключение, а можно не оборачивать, и исключение выбросит сам пых, тут уж кому как больше нравится.
.
# Delphinum (09.03.2017 / 20:37)
ramzes, это для минимализма. Можно конечно добавить проверку и выбрасывать исключение, а можно не оборачивать, и исключение выбросит сам пых, тут уж кому как больше нравится.
ну это конечно тебе виднее. но писать пример с нотисами не есть гуд по моему
.
ramzes, мои решения не отличаются кошерностью, цель - минимализм )

Но можно конечно поменять строчку, если тебе так будет спокойнее:
function container($name, $value = null){                                       
  static $container;                                                            
     
  if(is_null($value)){                                                          
    return isset($container[$name])? $container[$name] : null;                                                   
  }                                                                             
     
  $container[$name] = $value;                                                   
}
Всего: 5