PHP - Tratamento de Erros e Exceções

O tratamento de erros é o processo de detectar erros levantados pelo programa e, em seguida, tomar as medidas adequadas. Se você tratasse os erros de maneira adequada, isso poderia levar a muitas consequências imprevistas.

É muito simples em PHP lidar com erros.

Usando a função die ()

Ao escrever seu programa PHP, você deve verificar todas as condições de erro possíveis antes de prosseguir e tomar as medidas adequadas quando necessário.

Tente seguir o exemplo sem ter /tmp/test.xt arquivo e com este arquivo.

<?php
   if(!file_exists("/tmp/test.txt")) {
      die("File not found");
   }else {
      $file = fopen("/tmp/test.txt","r");
      print "Opend file sucessfully";
   }
   // Test of the code here.
?>

Desta forma, você pode escrever um código eficiente. Usando a técnica acima, você pode parar seu programa sempre que houver um erro e exibir uma mensagem mais significativa e amigável.

Definição da função de tratamento de erros personalizada

Você pode escrever sua própria função para lidar com qualquer erro. PHP fornece uma estrutura para definir a função de tratamento de erros.

Esta função deve ser capaz de lidar com um mínimo de dois parâmetros (nível de erro e mensagem de erro), mas pode aceitar até cinco parâmetros (opcionalmente: arquivo, número de linha e contexto de erro) -

Sintaxe

error_function(error_level,error_message, error_file,error_line,error_context);

Sr. Não Parâmetro e Descrição
1

error_level

Obrigatório - especifica o nível do relatório de erros para o erro definido pelo usuário. Deve ser um número de valor.

2

error_message

Obrigatório - especifica a mensagem de erro para o erro definido pelo usuário

3

error_file

Opcional - especifica o nome do arquivo em que ocorreu o erro

4

error_line

Opcional - especifica o número da linha em que ocorreu o erro

5

error_context

Opcional - especifica uma matriz contendo cada variável e seus valores em uso quando o erro ocorreu

Níveis de erro possíveis

Esses níveis de relatório de erro são os diferentes tipos de erro para os quais o manipulador de erros definido pelo usuário pode ser usado. Esses valores podem ser usados ​​em combinação com| operador

Sr. Não Constante e Descrição Valor
1

.E_ERROR

Erros fatais de tempo de execução. A execução do script foi interrompida

1
2

E_WARNING

Erros de tempo de execução não fatais. A execução do script não é interrompida

2
3

E_PARSE

Erros de análise em tempo de compilação. Erros de análise devem ser gerados apenas pelo analisador.

4
4

E_NOTICE

Avisos de tempo de execução. O script encontrou algo que pode ser um erro, mas também pode acontecer ao executar um script normalmente

8
5

E_CORE_ERROR

Erros fatais que ocorrem durante a inicialização do PHP.

16
6

E_CORE_WARNING

Erros de tempo de execução não fatais. Isso ocorre durante a inicialização do PHP.

32
7

E_USER_ERROR

Erro fatal gerado pelo usuário. Isso é como um E_ERROR definido pelo programador usando a função trigger_error () do PHP

256
8

E_USER_WARNING

Aviso não fatal gerado pelo usuário. Isso é como um E_WARNING definido pelo programador usando a função trigger_error () do PHP

512
9

E_USER_NOTICE

Aviso gerado pelo usuário. É como um E_NOTICE definido pelo programador usando a função trigger_error () do PHP

1024
10

E_STRICT

Avisos de tempo de execução. Ative para que o PHP sugira mudanças em seu código, o que garantirá a melhor interoperabilidade e compatibilidade futura de seu código.

2048
11

E_RECOVERABLE_ERROR

Erro fatal capturável. É como um E_ERROR, mas pode ser capturado por um identificador definido pelo usuário (ver também set_error_handler ())

4096
12

E_ALL

Todos os erros e avisos, exceto nível E_STRICT (E_STRICT fará parte de E_ALL a partir do PHP 6.0)

8191

Todo o nível de erro acima pode ser definido usando a seguinte função de biblioteca integrada do PHP, onde o nível cab pode ser qualquer um dos valores definidos na tabela acima.

int error_reporting ( [int $level] )

A seguir está a maneira como você pode criar uma função de tratamento de erros -

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
?>

Depois de definir seu gerenciador de erros personalizado, você precisa configurá-lo usando a biblioteca integrada de PHP set_error_handlerfunção. Agora vamos examinar nosso exemplo chamando uma função que não existe.

<?php
   error_reporting( E_ERROR );
   
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
   
   //set error handler
   set_error_handler("handleError");
   
   //trigger error
   myFunction();
?>

Tratamento de exceções

O PHP 5 possui um modelo de exceção semelhante ao de outras linguagens de programação. As exceções são importantes e fornecem um melhor controle sobre o tratamento de erros.

Vamos explicar a nova palavra-chave relacionada às exceções.

  • Try- Uma função que usa uma exceção deve estar em um bloco "try". Se a exceção não for acionada, o código continuará normalmente. No entanto, se a exceção for acionada, uma exceção será "lançada".

  • Throw- É assim que você aciona uma exceção. Cada "lançamento" deve ter pelo menos uma "pegada".

  • Catch - Um bloco "catch" recupera uma exceção e cria um objeto contendo as informações da exceção.

Quando uma exceção é lançada, o código após a instrução não será executado e o PHP tentará encontrar o primeiro bloco catch correspondente. Se uma exceção não for detectada, um erro fatal do PHP será emitido com uma "Exceção não detectada ...

  • Uma exceção pode ser lançada e capturada ("capturada") dentro do PHP. O código pode estar dentro de um bloco try.

  • Cada tentativa deve ter pelo menos um bloco catch correspondente. Vários blocos catch podem ser usados ​​para capturar diferentes classes de exceções.

  • As exceções podem ser lançadas (ou lançadas novamente) dentro de um bloco catch.

Exemplo

A seguir está o trecho do código, copie e cole este código em um arquivo e verifique o resultado.

<?php
   try {
      $error = 'Always throw this error';
      throw new Exception($error);
      
      // Code following an exception is not executed.
      echo 'Never executed';
   }catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
   }
   
   // Continue execution
   echo 'Hello World';
?>

No exemplo acima, a função $ e-> getMessage é usada para obter a mensagem de erro. Existem funções a seguir que podem ser usadas a partir deException classe.

  • getMessage() - mensagem de exceção

  • getCode() - código de exceção

  • getFile() - nome do arquivo de origem

  • getLine() - linha de origem

  • getTrace() - n array do backtrace ()

  • getTraceAsString() - string formatada de rastreamento

Criação de manipulador de exceções personalizado

Você pode definir seu próprio manipulador de exceções customizado. Use a seguinte função para definir uma função de tratamento de exceção definida pelo usuário.

string set_exception_handler ( callback $exception_handler )

Aqui exception_handleré o nome da função a ser chamada quando ocorre uma exceção não detectada. Esta função deve ser definida antes de chamar set_exception_handler ().

Exemplo

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }
	
   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');
   
   echo "Not Executed\n";
?>

Verifique o conjunto completo de funções de tratamento de erros em PHP Error Handling Functions