Pergunta

Estou construindo um automóvel personalizado com base no automobilismo de Zend Framework (pergunta relacionada aqui).

A abordagem básica, tirada dessa pergunta, é

class My_Autoloader implements Zend_Loader_Autoloader_Interface 
{
    public function autoload($class) 
    {
        // add your logic to find the required classes in here
    }
}

e, em seguida, vincular a nova classe Autoloader a um prefixo de classe.

Agora, o que não tenho certeza é como lidar com erros dentro do autoload Método (por exemplo, "Arquivo de classe não encontrado") de uma maneira adequada e compatível com ZF. Sou novo na estrutura, suas convenções e estilo.

  • Volto silenciosamente falso e deixo o processo de criação de classe cair?

  • De alguma forma, emite uma mensagem de erro ou log de alguma forma (o que seria bom identificar o problema) e retornar false? Se sim, qual é a maneira Zend isso?

  • Eu aciono um erro?

  • Eu faço uma exceção? Se sim, que tipo?

Foi útil?

Solução

Isso depende do tipo de erro. Eu consideraria um erro fatal se uma classe não puder ser carregada. Assim eu jogaria uma exceção, por exemplo,

class My_Autoloader_Exception extends Exception {}

Você descobrirá que o ZF usa muitas exceções personalizadas no nível do pacote e também fornece uma aula para que isso se estenda (embora eu considere isso opcional).

Aliás, há um exemplo de uso de Zend_Exception com o automóvel:

  try {
      // Calling Zend_Loader::loadClass() with a non-existant class will cause
      // an exception to be thrown in Zend_Loader:
      Zend_Loader::loadClass('nonexistantclass');
  } catch (Zend_Exception $e) {
      echo "Caught exception: " . get_class($e) . "\n";
      echo "Message: " . $e->getMessage() . "\n";
      // Other code to recover from the error
  }

Outras dicas

O próprio ZF usa duas abordagens diferentes:

  • Zend_Loader (a velho mecanismo de automobilismo) joga um Zend_Exception Caso algo esteja errado
  • Zend_Loader_Autoloader retorna false Quando o AutoLoader registrado usado retorna false

o Zend_Loader_Autoloader não captura nenhuma exceção lançada no Autoloader usado para eventualmente sua exceção personalizada, borbulhar através do Zend_Loader_Autoloader. Pessoalmente, apenas voltei false Caso não consiga carregar uma classe solicitada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top