Example #1
0
 /**
  * Padrão de Projeto Factory
  *
  * Produção de Carrinho de Compras utilizando como base um identificador o
  * nome da classe da camada de persistência, onde os parâmetros apresentados
  * serão utilizados durante a sua construção. Os parâmetros variam de acordo
  * com a classe de persistência utilizada.
  *
  * @param  string $storage Nome da Classe de Persistência
  * @param  array  $params  Parâmetros de Configuração
  * @return Hazel_Shop_Basket_Basket|null Resultado Solicitado
  */
 public static function factory($storage, array $params = array())
 {
     // Conversão
     $storage = (string) $storage;
     // Verificação de Armazenamento e Comportamento
     if (!class_exists($storage) || in_array('F1S_Shop_Basket_StorageInterface', class_implements($storage))) {
         throw new F1S_Shop_Basket_Exception("Invalid Storage Class: '{$storage}'");
     }
     // Criação do Armazenador
     $persistence = new $storage($params);
     // Captura do Carrinho de Compras
     $basket = null;
     try {
         // Camada de Persistência
         $basket = $persistence->read();
     } catch (Exception $e) {
         // Erro Encontrado
         $basket = null;
     }
     // Analisar Tipo do Objeto
     if (!$basket instanceof self) {
         $basket = null;
     }
     // Existência de Elemento
     if ($basket === null) {
         $basket = new self();
     }
     // Configurar Persistência
     $basket->_setStorage($persistence);
     // Resultados
     return $basket;
 }