Exceptions no PHP5
Obvio que não é só isso. O tratamento de exceções é muito mais poderoso. No exemplo anterior você não diferenciou uma exceção da outra. Agora vamos ver isso mais detalhado. A exceção como é uma classe, você pode herdar e fazer o que quiser, incluindo fazer log, etc. Mas a parte que você mais vai utilizar é apenas o nome da nova classe para controlar o fluxo.
Um exemplo mais detalhado:
Destrinchando o "catch". O primeiro parâmetro é o nome da classe de exceção ou super classe. Sim, super classe, você pode utilizar polimorfismo para pegar as exceções.
Logo, o "catch" acima pega qualquer exceção, já que toda exceção deve ser herdada da classe Exception para ser jogada.
Porém não controla nada o seu fluxo, o correto é sempre criar um conjunto exclusivo de exceções para cada erro de uma classe. Não se espante, é comum você encontrar classes com mais de 10 exceções. Geralmente você declara todas as exceções em cima da classe que vai jogar para ficar mais fácil de ler o código.
Um exemplo mais detalhado:
<?php class InvalidLogin extends Exception { } class InvalidPassword extends Exception { } function login($user, $password) { // login valido if ($user != 'usuario') { throw new InvalidLogin($login); } // senha invalida if ($password != 'senha') { throw new InvalidPassword($password); } return new User($user); } // tentar fazer o login try { login('eu', 'senha'); print 'se acima sair uma exceção, essa linha não será executada'; } catch (InvalidLogin $e) { // faz alguma coisa print $e->getMessage(); } catch (InvalidPassword $e) { // faz qualquer coisa print $e->getMessage(); } ?>
Destrinchando o "catch". O primeiro parâmetro é o nome da classe de exceção ou super classe. Sim, super classe, você pode utilizar polimorfismo para pegar as exceções.
<?php try { login('eu', 'senha'); } catch (Exception $e) { print $e->getMessage(); } ?>
Logo, o "catch" acima pega qualquer exceção, já que toda exceção deve ser herdada da classe Exception para ser jogada.
Porém não controla nada o seu fluxo, o correto é sempre criar um conjunto exclusivo de exceções para cada erro de uma classe. Não se espante, é comum você encontrar classes com mais de 10 exceções. Geralmente você declara todas as exceções em cima da classe que vai jogar para ficar mais fácil de ler o código.
parabéns pelo artigo!!
muito bom e bem explicado...
issu vai ser muito útil para o meu sistema de log de erro
:p
;)
muito bom e bem explicado...
issu vai ser muito útil para o meu sistema de log de erro
:p
;)
17/08/2005 7:19am
(~19 anos atrás)
Por exemplo, o exemplo da página 5 retornou:
Fatal error: Call to undefined function NotExists() in exception.php on line 33
Ah sim, na linha 33: throw NotExists($path);
[]s