Manuseio de erro adequado em um Zend_autoloader personalizado?
-
20-09-2019 - |
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?
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 umZend_Exception
Caso algo esteja erradoZend_Loader_Autoloader
retornafalse
Quando o AutoLoader registrado usado retornafalse
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.