programacao, artigo, php, desenvolvimento
Segunda parte da série de estudos sobre tratamento de erros em scripts PHP. Acesse também a parte 1.
Talvez a forma ainda mais utilizada de se tratar erros é retornando Verdadeiro ou Falso mediante a ocorrência ou não de uma operação esperada. Leia-se: Se abrir o arquivo com sucesso, retorna TRUE. Se ocorrer um erro e o arquivo não abrir, retorna FALSE. Veja o exemplo:
<?php
function abrir( $arquivo )
{
if( !file_exists($arquivo) )
{
return false;
}
else
{
return true;
}
}
$flag = abrir('inexistente.txt');
if ($flag==false)
{
echo('O arquivo escolhido não existe.');
}
else
{
// continua a aplicacao...
}
?>
Uma forma interessante de tratar erros de uma aplicação é através de duas funções que o PHP nos oferece: a trigger_error() e a set_error_handler(). Essas funções devem trabalhar juntas. Primeiro veja como funciona cada função, e depois veja como elas se integram para tratar o erro:

Entendendo cada função
A trigger_error() vem primeiro e tem como função definir o erro ocorrido. Ela recebe como parâmetros uma string (que será a mensagem de erro a ser exibida) e um inteiro que define o tipo de erro que está sendo deparado. Sendo o número inteiro do segundo parâmetro deve ser as constantes E_USER_ERROR, E_USER_WARNING e E_USER_NOTICE. Que valem 256, 512 e 1024 respectivamente.
trigger_error(string descricao, int tipo_erro)
E a função set_error_handler() vem depois. Ela define uma função ou método de um objeto como responsável por tratar os erros ocorridos. Ela recebe como parâmetro o nome da função criada que tratará os erros disparados e, opcionalmente, um segundo parâmetro que indica qual tipo de erro a função definida irá tratar (E_USER_ERROR, E_USER_WARNING ou E_USER_NOTICE).
Se o segundo parâmetro não for definido, a função indicada irá tratar qualquer tipo de erro que for disparado por trigger_error().
set_error_handler(handler nome_funcao [, int tipo_erro ])
A nossa terceira função é a que indicamos dentro de set_error_handler() e deverá ser criada pelo programador. É ela que irá manipular o erro. Então, sempre que um erro for disparado através de trigger_error(), é essa terceira função que será chamada.

Essa função poderá executar qualquer rotina em caso de erro. Pode armazenar a mensagem do erro em log, em banco de dados, exibir a mensagem na tela, etc. O desenvolvedor é que escolhe. E se ele quiser ter acesso às informações do erro (como o tipo do erro, a mensagem definida ao disparar o erro em trigger_error(), arquivo onde está o erro, linha onde aconteceu o erro) deverá criar essa função recebendo alguns parâmetros, sendo que:
trata_erro($tipo, $mensagem, $arquivo, $linha)
Como isso tudo funciona
Entendidas as funções que usamos para tratar error disparados, veja um exemplo de como elas devem trabalhar juntas:
<?php
// exemplo de uma funcao que seria fundamental para a aplicacao
function abrir( $arquivo )
{
if( ! file_exists( $arquivo ) )
{
// se o arquivo não existe, um erro do tipo fatal eh gerado
trigger_error('O arquivo não existe', E_USER_ERROR);
// retornamos falso para sair da funcao
return false;
}
else
{
// manipula o arquivo...
}
}
// criamos uma funcao que irah tratar o erro
function trata_erro($numero, $mensagem, $arquivo, $linha)
{
echo "$numero, $mensagem, $arquivo, $linha";
}
// definimos a funcao criada como a 'manipuladora' de erros
set_error_handler('trata_erro');
abrir('inexistente.txt');
?>
Não tenho certeza, mas acredito que o PHP use internamente essas funções para disparar os erros durante o processo de parse (execução do script).
Incluir comentário
2 mensagens enviadas
Últimos posts:
Destaques:
Programming and design by Samuel Corradi