Tratamento de exceções do PHP: uma introdução para iniciantes
O PHP possui um controle de exceções muito similar a outras linguagens de programação, fazendo com que o tratamento de exceções seja uma ferramenta muito interessante para os usuários da linguagem. Este artigo trata do controle e tratamento de exceções do PHP utilizando uma linguagem simples voltada para aqueles que não conhecem nada do assunto.
Introdução
Como este artigo é voltado para iniciantes que não sabem nada (relativamente ou absolutamente) sobre exceções, é primordial que se defina o que é exceção no PHP.
Exceção pode ser entendida como um "erro" que ocorre durante a execução de um script PHP. Esse "erro" pode ser um erro próprio do PHP como, por exemplo, quando se tenta incluir um arquivo inexistente através de include(), ou um "erro" gerado propositalmente pelo script, como, por exemplo, quando informamos o usuário ou senha errados num script de login.
Para clarear isso, vamos fazer um exemplo:
O que o código acima faz é tentar conectar com um servidor MySQL. Se a conexão ocorrer, a mensagem "Conexão concluída" será mostrada, senão, uma exceção será disparada pela linha throw new Exception('Erro na conexão'); e o bloco "catch" será chamado.
No nosso exemplo, o bloco "catch" apenas irá imprimir a mensagem "Erro na conexão", que foi definida no comando "throw".
Um iniciante poderá dizer: não existe uma maneira de fazer isso com blocos "if"? Sim, é possível, porém convém lembrar que estamos trabalhando com um exemplo muito, muito simples. Em scripts mais elaborados e complexos, tratar "erros" com blocos "if" pode se tornar extremamente complexo.
Exceção pode ser entendida como um "erro" que ocorre durante a execução de um script PHP. Esse "erro" pode ser um erro próprio do PHP como, por exemplo, quando se tenta incluir um arquivo inexistente através de include(), ou um "erro" gerado propositalmente pelo script, como, por exemplo, quando informamos o usuário ou senha errados num script de login.
Para clarear isso, vamos fazer um exemplo:
<?php
try {
if(!mysql_connect('localhost', 'root', '')){
throw new Exception('Erro na conexão');
}else{
echo 'Conexão concluída';
}
}catch (Exception $e){
echo $e->getMessage();
}
?>
try {
if(!mysql_connect('localhost', 'root', '')){
throw new Exception('Erro na conexão');
}else{
echo 'Conexão concluída';
}
}catch (Exception $e){
echo $e->getMessage();
}
?>
O que o código acima faz é tentar conectar com um servidor MySQL. Se a conexão ocorrer, a mensagem "Conexão concluída" será mostrada, senão, uma exceção será disparada pela linha throw new Exception('Erro na conexão'); e o bloco "catch" será chamado.
No nosso exemplo, o bloco "catch" apenas irá imprimir a mensagem "Erro na conexão", que foi definida no comando "throw".
Um iniciante poderá dizer: não existe uma maneira de fazer isso com blocos "if"? Sim, é possível, porém convém lembrar que estamos trabalhando com um exemplo muito, muito simples. Em scripts mais elaborados e complexos, tratar "erros" com blocos "if" pode se tornar extremamente complexo.
$login =@ $_REQUEST['login']; // suprime erros de tela
try {
if ( $login ) {
echo 'Ok';
}
else{
throw new Exception('Falhou', 0);
}
catch( Exception $e ) {
echo $e->getMessage();
}
...bla, bla, bla