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