Grab the RSS feed

Tratamento de Exceções



"Você pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direção".
Steve Jobs
 
Diante desta inspiradora frase, vou falar hoje sobre tratamento de exceções em PHP.
É compreensível que algumas pessoas ainda não  enxerguem  a utilidade deste recurso,  pois a depender do tamanho  do projeto, realmente não se faz necessário.
Caso seja dito  aqui algo que  desconheça, A documentação é a melhor fonte para sanar tais duvidas.

Let’s GO!

A  pergunta mais freqüente é : Qual  a vantagem do tratamento  de erros?
lembro que essa foi  a  primeira quando  Emmanuel  sugeriu  utilizarmos(rs...).
- Depuração rápida e eficiente do código.
- Apresentação simples e rápida do ocorrido.
- A criação de um log de erros.
- auxilia na documentação.
- e como o nome sugere,  te permite tratar, ou seja, manipular esses erros.

Te apresento  então a função  die().
É muito  simples de ser usado.




$arquivo = fopen(“inexistente.txt”,”r”);


O  arquivo não existe e ele retorna o seguinte erro:



Warning
: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in www\tutorial\trat_eror.php on line 2


O tratamento  desse erro passaria primeiramente pela checagem da existência do arquivo. E então a função  die() se encarregaria de apresentar o  erro  ocorrido, veja:




If(!file_exists(“inexiste.txt”)){
die(“Aquivo não existe!”);
}else{
$arquivo = fopen(“inexistente.txt”,”r”);
}



E mudamos de forma simples a aparência do  erro apresentado :
Arquivo não existe!

Agora é possível entender com maior clareza a importância de tratamento de erro em projetos de pequeno médio e grande porte.
            Certo, entendemos porque implementar esta checagem, mas o tratamento de exceção requer um log para verificar  a persistência do  erro, mas agora vamos sofisticar um  pouco  mais (rs...).

Em POO no PHP podemos tratar erros de forma mais limpa e “sofisticada”.
Seu usuário não precisa ser notificado do erro, nem  o sistema precisa parar para isso, por isso  utilizaremos as Exceções, que são objetos derivados da classe Exception do PHP.
Para disparar uma exceção utilizamos a palavra throw, vamos usar nosso exemplo acima.





Class lerArquivo {
Public function abrir           ($arquivo){
if (!file_exists(“$arquivo”)){
throw new Exception(“Arquivo não encontrado”);
}
}

}
$abre = new lerArquivo;
$abre->abrir(“inexistente.txt”);


Você vai notar que ele exibe uma mensagem onde indica dados de todas as propriedades  da classe.

Usaremos para não  exibir a  mensagem de erro o try do PHP, veja:




Class lerArquivo {
Public function abrir           ($arquivo){
if (!file_exists(“$arquivo”)){
throw new Exception(“Arquivo não encontrado”);
}
}

}
try{
$abre = new lerArquivo;
$abre->abrir(“inexistente.txt”);
}
catch (Exception $e){
$open_log = fopen(“log_error.log”,”w”);
fwrite($e->getMessage() );
$close_log = ($open_log);
}          


Verificando as alterações no código, percebemos o trow disparando  a exceção, em um try logo  abaixo recuperamos a mensagem através do catch e setamos o valor que queremos imprimir em nosso log_error.log , no caso o getMessage.
existem outros métodos disponíveis e que detalharei  mais abaixo.
  • 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.


Lembre-se, , comentário faz parte da documentação  do  código.
E existe a documentação PHP para ser consultada quando  precisar, devemos primar pela qualidade do código  estude e descubra qual é o  melhor método  para realizar suas tarefas,

Paz!


                                                                                       


1 comentários:

  • Neo Ferreira disse...

    Muito bom Talisson! parabéns pelo blog e continue assim!

  •