O que é uma exceção?
Um erro é um resultado inesperado do programa que não pode ser tratado pelo próprio programa.
Os erros são resolvidos corrigindo o programa. Um exemplo de erro seria um loop infinito que nunca para de ser executado.
Uma exceção é um resultado de programa inesperado que pode ser tratado pelo próprio programa.
Exemplos de exceção incluem tentar abrir um arquivo que não existe.
Essa exceção pode ser tratada criando o arquivo ou apresentando ao usuário a opção de pesquisar o arquivo.
Neste tutorial, você aprenderá-
- Por que lidar com exceção?
- Tratamento de erros de PHP
- Exemplos de tratamento de erros
- Diferença entre erros e exceção
- Exceções Múltiplas
- Testando o código
Por que lidar com exceção?
- Evite resultados inesperados em nossas páginas, que podem ser muito chatos ou irritantes para nossos usuários finais
- Melhorar a segurança de nossos aplicativos não expondo informações que usuários mal-intencionados podem usar para atacar nossos aplicativos
- As exceções Php são usadas para alterar o fluxo normal de um programa se ocorrer algum erro previsível.
Tratamento de erros de PHP
Quando ocorre um erro, dependendo de suas configurações, o PHP exibe a mensagem de erro no navegador da web com informações relacionadas ao erro ocorrido.
O PHP oferece várias maneiras de lidar com erros.
Veremos três (3) métodos comumente usados;
- Declarações de dado - a função de dado combina as funções de eco e saída em um. É muito útil quando queremos enviar uma mensagem e parar a execução do script quando ocorre um erro.
- Manipuladores de erros personalizados - são funções definidas pelo usuário que são chamadas sempre que ocorre um erro.
- Relatório de erro de PHP - a mensagem de erro dependendo das configurações de relatório de erro de PHP. Este método é muito útil em ambiente de desenvolvimento, quando você não tem ideia do que causou o erro. As informações exibidas podem ajudá-lo a depurar seu aplicativo.
Exemplos de tratamento de erros
Vejamos agora alguns exemplos simples com rotinas de tratamento de erros.
Vamos supor que desenvolvemos um aplicativo que usa arquivos de texto para armazenar dados. Podemos querer verificar a existência do arquivo antes de tentar ler seus dados.
O código abaixo implementa o exemplo acima.
Supondo que você salvou o arquivo simple_error.php na pasta phptuts, abra a URL http: //localhost/phptuts/simple_error.php
Você obterá os seguintes resultados
Como você pode ver nos resultados acima, isso faz com que nosso aplicativo pareça pouco profissional e pode ser irritante para o usuário.
Vamos modificar o código acima e escrever um gerenciador de erros para o aplicativo
Supondo que você salvou o código acima como error_handling.php, abra a URL http: //localhost/phptuts/error_handling.php
Nota: é uma boa prática de segurança exibir uma mensagem como a mostrada acima, em vez de mostrar a mensagem como “Arquivo não encontrado”.
Vejamos outro exemplo que usa um manipulador de erros personalizado.
O manipulador de erros personalizado será definido como a função de tratamento de erros PHP padrão e basicamente exibirá um número de erro e uma mensagem.
O código abaixo ilustra a implementação do exemplo acima
Abra a URL http: //localhost/phptuts/custom_error_handler.php você obterá os seguintes resultados
.
Como você pode ver no exemplo acima, manipuladores de erros personalizados são poderosos no sentido de que
- Eles nos permitem personalizar as mensagens de erro.
- O manipulador de erros personalizado também pode incluir registro de erros em um arquivo / banco de dados, envio de e-mail para o desenvolvedor etc.
Vamos agora examinar o terceiro tipo de tratamento de erros. Estaremos usando a função interna do PHP error_reporting. Possui a seguinte sintaxe básica
AQUI,
- “Error_reporting” é a função de relatório de erros do PHP
- “$ Reporting_level" é opcional, pode ser usado para definir o nível de relatório. Se nenhum nível de relatório foi especificado, o PHP usará o nível de relatório de erro padrão conforme especificado no arquivo php.ini.
Nível de Relatório | Descrição | Exemplo |
---|---|---|
E_AVISO | Exibe apenas mensagens de aviso. Não interrompe a execução do script | relatório_erro (E_WARNING); |
E_NOTICE | Exibe avisos que podem ocorrer durante a execução normal de um programa ou podem ser um erro. | relatório_de_erro (E_ AVISO); |
E_USER_ERROR | Exibe erros gerados pelo usuário, ou seja, manipulador de erros personalizado | relatório_erro (E_ USER_ERROR); |
E_USER_WARNING | Exibe mensagens de aviso geradas pelo usuário | relatório_de_erro (E_USER_WARNING); |
E_USER_NOTICE | Exibe avisos gerados pelo usuário | relatório_de_erro (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Exibe erros que não são fatais e podem ser tratados com manipuladores de erros personalizados | relatório_de_erro (E_RECOVERABLE_ERROR); |
E_ALL | Exibe todos os erros e avisos | relatório_de_erro (E_ ALL); |
Diferença entre erros e exceção
- Exceções são lançadas e devem ser detectadas, enquanto os erros geralmente são irrecuperáveis.
-
As exceções são tratadas de maneira orientada a objetos.
Isso significa quando uma exceção é lançada; um objeto de exceção é criado contendo os detalhes da exceção.
A tabela abaixo mostra os métodos do objeto de exceção
Método | Descrição | Exemplo |
---|---|---|
getMessage () | Mostra a mensagem da exceção |
getMessage();?> |
Obter código() | Exibe o código numérico que representa a exceção |
getCode();?> |
getFile () | Mostra o nome do arquivo e o caminho onde ocorreu a exceção |
getFile();?> |
Obter linha() | Mostra o número da linha onde ocorreu a exceção |
getLine();?> |
getTrace () | Exibe uma matriz do backtrace antes da exceção |
getTrace());?> |
getPrevious () | Mostra a exceção anterior antes da atual |
getPrevious();?> |
getTraceAsString () | Exibe o backtrace da exceção como uma string em vez de uma matriz |
getTraceAsString();?> |
__para sequenciar() | Exibe toda a exceção como uma string |
__toString();?> |
Abaixo está a sintaxe básica para lançar uma exceção.
AQUI,
- “Lançar” é a palavra-chave usada para lançar a exceção
- “New Exception (…)” cria um objeto de exceção e passa a string “Este é um exemplo de exceção“ como o parâmetro de mensagem.
O código acima gera a seguinte mensagem.
Agora vamos ver um exemplo que implementa as exceções throw e catch.
Vamos modificar o exemplo acima e incluir o try, throw e catch.
Possui a seguinte sintaxe básica.
AQUI,
- “Try {…}” é o bloco de código a ser executado que pode potencialmente gerar uma exceção
- “Catch (Exception $ e) {…}” é o bloco de código que captura a exceção lançada e atribui o objeto de exceção à variável $ e.
O código abaixo mostra o exemplo básico de exceção com a exceção try, throw e catch implementada.
O programa lança deliberadamente uma exceção que então captura.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Abra a URL http: //localhost/phptuts/exception_handling.php Você obterá os seguintes resultados.
Também é possível criar múltiplas exceções para uma instrução php try dependendo do tipo de exceção lançada.
Veja o artigo sobre MySQL, acesso a dados PHP
… Para exemplos de implementação de múltiplas exceçõesExceções Múltiplas
Exceções múltiplas usam vários blocos try catch para tratar as exceções lançadas. Múltiplas exceções são úteis quando;
- Você deseja exibir uma mensagem personalizada, dependendo da exceção lançada
- Você deseja realizar uma operação única, dependendo da exceção lançada
O fluxograma abaixo ilustra como várias exceções funcionam
Vejamos um exemplo que usa várias exceções.
Vamos modificar o código que divide um número pelo denominador passado.
Esperamos que dois tipos de exceções ocorram;
- Divisão por zero
- Divisão por um número negativo
Para simplificar, exibiremos apenas o tipo de exceção em nossos blocos catch.
O PHP embutido na classe Exception é usado para lançar exceções.
Criaremos duas classes que estendem a classe de exceção e as usaremos para lançar exceções.
O código abaixo mostra a implementação.
Testando o código
Vamos assumir que você salvou multiple_exceptions.php na pasta phptuts.
Navegue até o URL http: //localhost/phptuts/multiple_exceptions.php
Volte para o arquivo PHP e passe -1 como o parâmetro, conforme mostrado no diagrama a seguir.
Navegue até a URL http: //localhost/phptuts/multiple_exceptions.php .
Que resultados você consegue? Passe 3 como parâmetro.
Que resultados você consegue?
Resumo
- Erros são resultados inesperados produzidos pelo código PHP
- O tratamento de erros melhora o desempenho do aplicativo
- O PHP possui funções integradas que podem ser usadas para personalizar a maneira como o PHP relata erros
- As exceções são como erros, mas podem ser detectadas usando o bloco catch quando lançadas.
- Exibir mensagens de erro que mostram informações de erro é considerado uma prática de segurança ruim.