0

Exceptions no PHP5

criado por André Mendonça em 15/08/2005 11:37pm
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:
<?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.

Comentários:

Mostrando 1 - 2 de 2 comentários
Click disse:
Bem explicado, recomendo apenas colocar códigos já testados.
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


05/03/2006 5:46pm (~18 anos atrás)

parabéns pelo artigo!!
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)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)