Samuel Corradi

Blog

Tratando erros com PHP - Parte 2

programacao, artigo, php, desenvolvimento

Segunda parte da série de estudos sobre tratamento de erros em scripts PHP. Acesse também a parte 1.

Retornando flags (Verdadeiro ou Falso)

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...
}

?>

Disparando erros

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:

Fail

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.

Fail

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

Samuel Corradi

Mas qual pergunta?

Jonathan

Só estou aki pra responder a pergunta a baixo

Últimos posts:

Destaques:

PHP Coupé - Desenvolvimento rápido e reaproveitável vForm - Validador universal de formulários

Programming and design by Samuel Corradi