Curso de PHP Orientado a Objetos – Parte 11

php_aula_11Décimo primeiro artigo do curso de PHP Orientado a Objetos. Dessa vez, veremos o tratamento de erros no PHP, prática fundamental para o desenvolvimento com qualidade.
Para conhecer as demais partes do curso, clique aqui.

Ao final deste artigo, você será capaz de:

  • Utilizar as funções de tratamento de erros com: die(), trigger_error(), set_error_handler e error_log;
  • Realizar o tratamento de exceções.

Tratar erros é considerado uma boa prática quando o assunto é desenvolvimento de sistemas. Essa prática diferencia programadores de verdade de curiosos, seu código fonte será muito mais valorizado, seguro e robusto quando aplicado as técnicas de tratamento.

No PHP existem três tipos de erros: Notices (notificações), Warnings (alertas) e os Fatals (fatais). Os erros fatais quando ocorrem fazem com que o script finalize de forma imediata. Pode ocorrer quando, por exemplo, uma função ou um método que não existe é chamado.

A função die()

Antes de explicar sobre a função die(), vale ressaltar que seu uso deve ser cuidadoso, pois quando chamada, a função die() interrompe a execução do script. Podemos dizer que se trata de uma função muito “radical”, por isso, seu uso não é recomendável, salvo alguma exceções.

Vamos analisar:

Perceba que a execução do script é interrompida quando a função die() é chamada, o que faz com que seja impresso no navegador somente a frase  “Ocorreu um erro”. Ignorando o restante do script.

Lançamento de Erros

Essa é uma forma elegante de se manipular erros. Utilizamos basicamente duas funções: trigger_error() e a set_error_handler(). A primeira lança um erro e a segunda define uma função que manipulará os erros lançados.

trigger_error()

Esta função espera dois parâmetros:

  • erro: Mensagem de erro gerada;
  • tipo: Tipo de erro.
Tipos de erros:
  • E_USER_ERROR: Erro fatal gerado pelo usuário. A execução do script é interrompida;
  • E_USER_WARNING: Erro não fatal gerado pelo usuário. A execução do script não é interrompida;
  • E_USER_NOTICE: Padrão. Aviso gerado pelo usuário. A execução do script não é interrompida.
Vamos analisar um exemplo para entender melhor a aplicabilidade:

 

Como resultado a execução deste script, supondo que não tenha sido passado nada através do campo nome, o seguinte erro seria mostrado:

Perceba que a saída do erro agora foi tratada.

set_error_handler()

Essa função defini qual função manipulará os erros lançados.

É possível por exemplo, além de tratar os erros com mensagens personalizadas, enviá-los por email, armazená-los em um arquivo de log ou mesmo em um banco de dados.

Por padrão o php envia o log de erros para o sistema de log do servidor onde roda a aplicação, isso depende da configuração do php.ini. Podemos utilizar a função error_log() em conjunto com a função set_error_handler() para enviar emails sobre os erros selecionáveis.

Vamos ao exemplo:

Para o exemplo funcionar é necessário que você tenha um servidor de email configurado. Provavelmente se você testar localmente, não dará certo.

Você também pode, ao invés de enviar o email, armazena-lo em um arquivo de texto utilizando a função fopen().

Tratamento de exceções

Esta maravilha (sim, é fantastico) foi incluída no PHP 5. Antes já existia para outras linguagens de programação como C++,  Java e Delphi. Basicamente uma exceção muda o curso normal de um script caso ocorra um erro.

Uma exceção é um objeto especial derivado da classe Exception que contêm alguns métodos que relatam ao programador o que aconteceu. Vamos agora conhecer estes métodos:

  • getMessage() – Retorna a mensagem de erro;
  • getCode() – Retorna o código de erro;
  • getFile() – Retorna o arquivo no qual o erro ocorreu;
  • getLine() – Retorna a linha na qual o erro ocorreu;
  • getTrace() – Retorna um array com as ações até o erro;
  • getTraceAsString() – Retorna as ações em forma de string.

Quando executamos operações que podem resultar em erros, usamos o bloco try para monitorá-los. Dentro das operações críticas, quando ocorre um erro, usamos o comando throw para “lançar” uma exceção (Objeto Exception), para interromper a execução do bloco contido na clausula try, a qual recebe esta exceção e repassa para outro bloco de comandos catch. Dentro do bloco catch podemos definir o que fazer: Emitir uma mensagem de erro para o usuário e cancelar a execução do script ou armazenar os detalhes do erro em um arquivo de log e etc.

Para simplificar, vamos ao exemplo:

O resultado, caso o arquivo não seja encontrado:

Tratar erros é fundamental, essa prática protege o código e deixa o algoritmo com aspecto bem mais profissional.
E assim finalizamos mais um artigo do curso.

Estamos chegando ao fim do que eu havia pensado em escrever sobre este tema. Teremos apenas mais um artigo, sobre PDO, que pretendo publicar amanhã (12 de abril), caso a febre não volte a me perseguir.

Não se esqueça de comentar!


8 Responses to Curso de PHP Orientado a Objetos – Parte 11

  1. Flávio disse:

    Realmente o tratamento de erro nos livra de vários problemas.

    Ótimo artigo. Parabéns

  2. Marcelo Augusto disse:

    Otimo artigo amigo, obrigado

  3. Henco disse:

    Muito bom cara! Parabéns mesmo! :D

  4. Tiago Sabadini disse:

    Excelente artigo. Obrigado por compartilhar…

  5. Zenon disse:

    Show de bola o código na linha 21. (if( !$data = @file_get_contents($arquivo) ){)

  6. Julio disse:

    Leandro muito bom esse artigo parabéns.
    Estou desenvolvendo uma aplicação mas não consigo tratar o erro que é gerado na conexão com o banco de dados. Poderia me ajudar?
    O erro é este:

    Fatal error: Maximum execution time of 30 seconds exceeded in C:projetosautoatendimentoincludes.php on line 53

    Não gera exceptions nem nada, apenas encerra o processamento.

Deixe uma resposta para Julio Cancelar resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *