Exceptions no PHP5
Exception é apenas uma classe, ela praticamente não faz nada. A parte que realmente faz todo o processo é a linguagem. Não é uma coisa que se possa criar, é nativa.
O nome correto para esse sistema é "Tratamento de exceções". Para disparar uma exceção, que no exemplo anterior seria o -1 e o -2 você deve utilizar um comando chamado "throw" (jogar) criando uma exceção.
Exemplo:
É simples. Mas, além disso a classe de exceção possui alguns atributos métodos que você pode olhar melhor no manual do php.net. O principal é o parâmetro opcioanal $message no construtor da classe de exceção.
Vamos ver o exemplo anterior utilizando o disparo de exceções:
Note acima que eu não precisei parar a estrutura de código. O comando "throw" interrompe a execução de todo o bloco e retorna para o ponto de chamada, quase como um "return", porém não retorna nada.
Inclusive, acontece efeito em cascata. A exceção não para só o método que jogou a ela, ela vai fazendo o caminho inverso e vai parando todos os métodos anteriores. Complicou? Não se preucupe.
O nome correto para esse sistema é "Tratamento de exceções". Para disparar uma exceção, que no exemplo anterior seria o -1 e o -2 você deve utilizar um comando chamado "throw" (jogar) criando uma exceção.
Exemplo:
<?php function qualquer() { throw new Exception(); } ?>
É simples. Mas, além disso a classe de exceção possui alguns atributos métodos que você pode olhar melhor no manual do php.net. O principal é o parâmetro opcioanal $message no construtor da classe de exceção.
Vamos ver o exemplo anterior utilizando o disparo de exceções:
<?php /** * Retorna o usuario para login * @param string $user login do usuario * @param string $password senha do usuario * @return User */ function login($user, $password) { // login valido if ($user != 'usuario') { throw new Exception('login invalido'); } // senha invalida if ($password != 'senha') { throw new Exception('senha invalida'); } return new User($user); } ?>
Note acima que eu não precisei parar a estrutura de código. O comando "throw" interrompe a execução de todo o bloco e retorna para o ponto de chamada, quase como um "return", porém não retorna nada.
Inclusive, acontece efeito em cascata. A exceção não para só o método que jogou a ela, ela vai fazendo o caminho inverso e vai parando todos os métodos anteriores. Complicou? Não se preucupe.
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