Tutorial de POO no PHP: Tratamento de erros


Autor/fonte: Bruno Viana
Tags: [ tutorial poo ]




Exceções

Quando o programa não é executado de forma esperada é necessário informar o que está acontecendo ao desenvolvedor. Algumas vezes o programa pode parar de executar por conta desses erros e o desenvolvedor não tem idéia do que está acontecendo. E o pior de tudo isso, é que às vezes o programa para por conta de uma simples divisão por zero vinda do usuário.

Exceções são objetos derivados da classe Exception, que tem por objetivo enviar informações essênciais ao desenvolvedor para que o mesmo possa tratar esses erros sem que o programa pare. Com o PHP disparando esses objetos, é possível interceptalos e trata-los de forma correta.

Quando se desevolve API’s para distrubuir para terceiros utilizarem isso é mais do que preciso.

1. Disparando Exceções

Quando queremos disparar exceções utilizamos a palavra chave throw e em seguida passamos o objeto a ser disparado.

Abaixo estamos criando uma classe que lê arquivos para distribuir para que outros desenvolvedores possam usá-la, e queremos que caso esse arquivo não uma exceção seja disparada:

<?php
class LeitorArquivo
{
	public function abrir( $arquivo )
	{
		if( !file_exists( $arquivo ) ){
			throw new Exception( 'O arquivo não existe.' );
		}
	}
}

$leitor = new LeitorArquivo();
$leitor->abrir( 'inexistente.txt' );
?>

2. Capturando Exceções

Agora somos o desenvolvedor que está utilizando está classe. E percebi que quando informo um arquivo que não existe o sistema está mostrando um erro estranho:

Fatal error: Uncaught exception 'Exception' with message 'O arquivo não existe.' in 
D:\xampplite\htdocs\index.php:10 Stack trace: #0 D:\xampplite\htdocs\index.php(16): 
LeitorArquivo->abrir('inexistente.txt') #1 {main} thrown in D:\xampplite\htdocs\index.php 
on line 10

Isso ocorre por causa da exceção que a classe dispara quando não encontra um arquivo. Porém eu não posso deixar isso ser mostrado para o usuário do meu sistema, mas eu quero que ele guarde um log dessa mensagem de erro.

Para isso utilizamos o bloco try onde ficará todo o código que tem a possibilidade de disparar uma exceção, e abaixo do try criaremos um catch, que será responsável por capturar qualquer exceção disparada no bloco try.

<?php
try{
	$leitor = new LeitorArquivo();
	$leitor->abrir( 'inexistente.txt' );
}
catch( Exception $e ){
	LogManager:log( $e->getMessage() );
}
?>

No exemplo o bloco catch está recebendo uma variável $e do tipo Exception. Ela é exatamente o objeto da exceção disparada. Qualquer objeto derivado da classe Exception possui métodos que informam ao desenvolvedor um relado do que aconteceu. Esses métodos são:

  • getMessage: Retorna a mensagem de erro;
  • getCode: Retorna o código de erro;
  • getFile: Retorna o arquivo do qual ocorreu o erro;
  • getLine: Retorna a linha na qual ocorreu o erro;
  • getTrace: Retorna um array com todos os métodos e arquivos chamados até o erro ocorrer;
  • getTraceAsString: Retorna o array usado em getTrace como uma string.




Rec6 Digg del.icio.us

Enviado por xKuRt em 03/02/2009 às 08:56


Itens relacionados

Tutorial de POO no PHP: Padrões de projetos
Tutorial de POO no PHP: Classes e Objetos
Tutorial de POO no PHP: Intercepções
Tutorial de POO no PHP: Programação Estruturada x Programação Orientada a Objetos
Tutorial de POO no PHP: Abstração
Tutorial de POO no PHP: Encapsulamento
Tutorial de POO no PHP: Membros da classe
Tutorial de POO no PHP: Herança e polimorfismo

Avaliação

Avaliação desta publicação: 10.00; Total de avaliações: 1


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por BMCVET em 07/11/2009 às 12:08

Muito Bom Tuturial Parabens !!!

--
BMCVET


Envio de comentário:




  

Quinta, 02 de Setembro de 2010


Top 5 membros

Últimos membros online

Últimos membros cadastrados