PHP - Gestione errori ed eccezioni
La gestione degli errori è il processo di rilevamento degli errori sollevati dal programma e quindi di intraprendere l'azione appropriata. Se gestisci correttamente gli errori, ciò potrebbe portare a molte conseguenze impreviste.
È molto semplice in PHP gestire un errore.
Utilizzando la funzione die ()
Durante la scrittura del programma PHP è necessario verificare tutte le possibili condizioni di errore prima di procedere e intraprendere le azioni appropriate quando necessario.
Prova a seguire l'esempio senza averlo /tmp/test.xt file e con questo file.
<?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.
?>
In questo modo puoi scrivere un codice efficiente. Usando la tecnica sopra è possibile interrompere il programma ogni volta che si verifica un errore e visualizzare un messaggio più significativo e intuitivo.
Definizione della funzione di gestione degli errori personalizzata
Puoi scrivere la tua funzione per gestire qualsiasi errore. PHP fornisce un framework per definire la funzione di gestione degli errori.
Questa funzione deve essere in grado di gestire un minimo di due parametri (livello di errore e messaggio di errore) ma può accettare fino a cinque parametri (facoltativamente: file, numero di riga e contesto dell'errore) -
Sintassi
error_function(error_level,error_message, error_file,error_line,error_context);
Suor n | Parametro e descrizione |
---|---|
1 | error_level Obbligatorio: specifica il livello del report di errore per l'errore definito dall'utente. Deve essere un numero di valore. |
2 | error_message Obbligatorio: specifica il messaggio di errore per l'errore definito dall'utente |
3 | error_file Facoltativo: specifica il nome del file in cui si è verificato l'errore |
4 | error_line Facoltativo: specifica il numero di riga in cui si è verificato l'errore |
5 | error_context Facoltativo: specifica un array contenente ogni variabile e i relativi valori in uso quando si è verificato l'errore |
Possibili livelli di errore
Questi livelli di rapporto di errore sono i diversi tipi di errore per cui può essere utilizzato il gestore degli errori definito dall'utente. Questi valori vengono utilizzati in combinazione utilizzando| operatore
Suor n | Costante e descrizione | Valore |
---|---|---|
1 | .E_ERROR Errori irreversibili in fase di esecuzione. L'esecuzione dello script viene interrotta |
1 |
2 | E_WARNING Errori di runtime non irreversibili. L'esecuzione dello script non viene interrotta |
2 |
3 | E_PARSE Errori di analisi in fase di compilazione. Gli errori di analisi dovrebbero essere generati solo dal parser. |
4 |
4 | E_NOTICE Avvisi in fase di esecuzione. Lo script ha trovato qualcosa che potrebbe essere un errore, ma potrebbe anche accadere durante l'esecuzione di uno script normalmente |
8 |
5 | E_CORE_ERROR Errori irreversibili che si verificano durante l'avvio iniziale di PHP. |
16 |
6 | E_CORE_WARNING Errori di runtime non irreversibili. Ciò si verifica durante l'avvio iniziale di PHP. |
32 |
7 | E_USER_ERROR Errore irreversibile generato dall'utente. È come un E_ERROR impostato dal programmatore utilizzando la funzione PHP trigger_error () |
256 |
8 | E_USER_WARNING Avviso non irreversibile generato dall'utente. Questo è come un E_WARNING impostato dal programmatore utilizzando la funzione PHP trigger_error () |
512 |
9 | E_USER_NOTICE Avviso generato dall'utente. È come un E_NOTICE impostato dal programmatore utilizzando la funzione PHP trigger_error () |
1024 |
10 | E_STRICT Avvisi in fase di esecuzione. Abilita per fare in modo che PHP suggerisca modifiche al codice che garantiranno la migliore interoperabilità e compatibilità con le versioni successive del codice. |
2048 |
11 | E_RECOVERABLE_ERROR Errore irreversibile catturabile. È come un E_ERROR ma può essere catturato da un handle definito dall'utente (vedere anche set_error_handler ()) |
4096 |
12 | E_ALL Tutti gli errori e gli avvisi, eccetto il livello E_STRICT (E_STRICT farà parte di E_ALL a partire da PHP 6.0) |
8191 |
Tutto il livello di errore sopra può essere impostato utilizzando la seguente funzione di libreria incorporata in PHP dove il livello cab è uno qualsiasi dei valori definiti nella tabella sopra.
int error_reporting ( [int $level] )
Di seguito è riportato il modo in cui è possibile creare una funzione di gestione degli errori:
<?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();
}
?>
Una volta definito il gestore degli errori personalizzato, è necessario impostarlo utilizzando la libreria incorporata di PHP set_error_handlerfunzione. Ora esaminiamo il nostro esempio chiamando una funzione che non esiste.
<?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();
?>
Gestione delle eccezioni
PHP 5 ha un modello di eccezione simile a quello di altri linguaggi di programmazione. Le eccezioni sono importanti e forniscono un migliore controllo sulla gestione degli errori.
Spieghiamo qui la nuova parola chiave relativa alle eccezioni.
Try- Una funzione che utilizza un'eccezione dovrebbe trovarsi in un blocco "try". Se l'eccezione non si attiva, il codice continuerà normalmente. Tuttavia, se l'eccezione si attiva, viene "generata" un'eccezione.
Throw- Ecco come si attiva un'eccezione. Ogni "lancio" deve avere almeno una "presa".
Catch - Un blocco "catch" recupera un'eccezione e crea un oggetto contenente le informazioni sull'eccezione.
Quando viene generata un'eccezione, il codice che segue l'istruzione non verrà eseguito e PHP tenterà di trovare il primo blocco catch corrispondente. Se non viene rilevata un'eccezione, verrà emesso un errore irreversibile PHP con "Eccezione non rilevata ...
Un'eccezione può essere lanciata e catturata ("catturata") all'interno di PHP. Il codice può essere racchiuso in un blocco try.
Ogni tentativo deve avere almeno un blocco di cattura corrispondente. È possibile utilizzare più blocchi di cattura per catturare diverse classi di eccezioni.
Le eccezioni possono essere lanciate (o rilanciate) all'interno di un blocco catch.
Esempio
Di seguito è riportato il pezzo di codice, copia e incolla questo codice in un file e verifica il risultato.
<?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';
?>
Nell'esempio precedente, la funzione $ e-> getMessage viene utilizzata per ottenere un messaggio di errore. Ci sono le seguenti funzioni che possono essere utilizzate daException classe.
getMessage() - messaggio di eccezione
getCode() - codice di eccezione
getFile() - nome del file sorgente
getLine() - linea di origine
getTrace() - n array del backtrace ()
getTraceAsString() - stringa di traccia formata
Creazione di un gestore di eccezioni personalizzato
È possibile definire il proprio gestore di eccezioni personalizzato. Utilizzare la seguente funzione per impostare una funzione di gestione delle eccezioni definita dall'utente.
string set_exception_handler ( callback $exception_handler )
Qui exception_handlerè il nome della funzione da chiamare quando si verifica un'eccezione non rilevata. Questa funzione deve essere definita prima di chiamare set_exception_handler ().
Esempio
<?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";
?>
Controllare il set completo di funzioni di gestione degli errori in PHP Error Handling Functions