Bernardo,
Não há necessidade de ter vários blocos de Try/Catch. O Catch funciona
como um "else if", ou seja, você pode ter várias condições:
try {
...
}
catch (Email_Exception $e) {
// tratamento de erro de envio de e-mail
}
catch (Model_Exception $e) {
// tratamento de erro no modelo (de insert, por exemplo)
}
catch (Exception $e) {
// tratamento de erro geral, não identificado
}
No código acima, você pode especializar a classe Exception pra
disparar diferentes tipos de erros, e assim tratar o erro na hora de
"lançar" a exceção.
Uma observação é que não achei no manual do PHP um exemplo com vários
"Catches" com um único Try. Está escrito que é possível, mas seria bom
testar. ;)
2012/6/4 Bernardo Castro <[email protected]>:
> A algum tempo tenho usado o bloco “tr...catch” erradamente nos sites que
> tenho desenvolvido. Por exemplo, ter duas funções em apenas um bloco catch.
> Veja o código.
>
> http://pastebin.com/3JNEnqq0
>
> Se parar para pensar esse não é um forma 100% seguro para tratamento de
> exceções. No bloco acima se o método de adicionar endereço falhar o cadastro
> do cliente vai está errado. Tinha ciencia desse problema mas não levava a
> serio.
>
> Qual seria a melhor forma de garantir o cadastro do cliente? O código acima
> foi somente um exemplo, tenho um caso real atualmente que é o seguinte.
> Tenho um processo de cadastro de cliente onde é necessário inserir os
> serviços adquiridos, criar a fatura, enviar e-mails de notificação.(varios
> e-mails)
>
> http://pastebin.com/UYQFuUT8
>
> O último método de enviar e-mail “notificar” e sem dúvida o grande vilão,
> nele a grandes chances de ocorrer um erro por falha na conexão, host fora do
> ar. Etc.
>
>
> Criando vários blocos “catch” eu consigo gerenciar detalhadamente o erro
> caso aconteça em qualquer parte do código.
>
> Se a última etapa falhar, que é a de notificação, posso ainda carregar uma
> página de sucesso e avisar somente que ocorreu um erro no envio do e-mail.
>
> Se acontecer uma falha na parte de adicionar o serviço ao cliente, que seria
> muito ruim, posso simplesmente apagar o cadastro do cliente feito no
> primeiro processo.
>
>
> Essa seria a melhor forma de controlar os possíveis erros ? Alguém faz algo
> diferente disso?
>
>
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php"
> dos Grupos do Google.
> Para ver esta discussão na web, acesse
> https://groups.google.com/d/msg/kohana-php/-/PgEhMsjT0psJ.
> Para postar neste grupo, envie um e-mail para [email protected].
> Para cancelar a inscrição nesse grupo, envie um e-mail para
> [email protected].
> Para obter mais opções, visite esse grupo em
> http://groups.google.com/group/kohana-php?hl=pt-BR.
--
Newton Wagner
msn/gtalk: [email protected]
twitter: http://twitter.com/newtonwagner
site: http://www.newtonwagner.net/
--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos
Grupos do Google.
Para postar neste grupo, envie um e-mail para [email protected].
Para cancelar a inscrição nesse grupo, envie um e-mail para
[email protected].
Para obter mais opções, visite esse grupo em
http://groups.google.com/group/kohana-php?hl=pt-BR.