Esempio di PHP Try Catch: tutorial sulla gestione di eccezioni ed errori

Che cos'è un'eccezione?

Un errore è un risultato imprevisto del programma che non può essere gestito dal programma stesso.

Gli errori vengono risolti riparando il programma. Un esempio di errore potrebbe essere un ciclo infinito che non smette mai di essere eseguito.

Un'eccezione è un risultato imprevisto del programma che può essere gestito dal programma stesso.

Esempi di eccezioni includono il tentativo di aprire un file che non esiste.

Questa eccezione può essere gestita creando il file o presentando all'utente la possibilità di cercarlo.

Perché gestire l'eccezione?

  • Evita risultati imprevisti sulle nostre pagine che possono essere molto fastidiosi o irritanti per i nostri utenti finali
  • Migliorare la sicurezza delle nostre applicazioni evitando di esporre informazioni che utenti malintenzionati potrebbero utilizzare per attaccare le nostre applicazioni
  • Le eccezioni Php vengono utilizzate per modificare il normale flusso di un programma se si verifica un errore prevedibile.

Gestione degli errori PHP

Quando si verifica un errore, a seconda delle impostazioni di configurazione, PHP visualizza il messaggio di errore nel browser web con le informazioni relative all'errore che si è verificato.

PHP offre diversi modi per gestire gli errori.

Esamineremo tre (3) metodi comunemente utilizzati;

  1. Dichiarazioni morte– la funzione fustella combina la funzione eco e quella di uscita in una. È molto utile quando vogliamo visualizzare un messaggio e interrompere l'esecuzione dello script quando si verifica un errore.
  2. Gestori di errori personalizzati – si tratta di funzioni definite dall'utente che vengono richiamate ogni volta che si verifica un errore.
  3. Segnalazione errori PHP – il messaggio di errore dipende dalle impostazioni di segnalazione degli errori PHP. Questo metodo è molto utile nell'ambiente di sviluppo quando non si ha idea di cosa abbia causato l'errore. Le informazioni visualizzate possono aiutarti a eseguire il debug della tua applicazione.

Esempi di gestione degli errori

Diamo ora un'occhiata ad alcuni semplici esempi con routine di gestione degli errori.

Supponiamo di aver sviluppato un'applicazione che utilizza file di testo per archiviare dati. Potremmo voler verificare l'esistenza del file prima di tentare di leggerne i dati.

Il codice seguente implementa l'esempio precedente.

<?php
$denominator = 0;
echo 2 / $denominator;
?>

Supponendo che tu abbia salvato il file simple_error.php nella cartella phptuts, apri l'URL http://localhost/phptuts/simple_error.php

Otterrai i seguenti risultati

Gestione degli errori PHP

Come puoi vedere dai risultati sopra, la nostra applicazione appare poco professionale e può risultare fastidiosa per l'utente.

Modificheremo il codice precedente e scriveremo un gestore degli errori per l'applicazione

<?php
$denominator = 0;
if ($denominator != 0) {
    echo 2 / $denominator;
} else {
    echo "cannot divide by zero (0)";
}
?>

Supponendo che tu abbia salvato il codice sopra come error_handling.php, apri l'URL http://localhost/phptuts/error_handling.php

Gestione delle eccezioni PHP in PHP

Nota: è una buona norma di sicurezza visualizzare un messaggio come quello mostrato sopra invece di un messaggio del tipo "File non trovato".

Diamo un'occhiata a un altro esempio che utilizza un gestore di errori personalizzato.

Il gestore degli errori personalizzato verrà impostato come funzione predefinita di gestione degli errori PHP e sostanzialmente visualizzerà un numero di errore e un messaggio.

Il codice seguente illustra l'implementazione dell'esempio precedente

<?php
function my_error_handler($error_no, $error_msg)
{
    echo "Opps, something went wrong:";
    echo "Error number: [$error_no]";
    echo "Error Description: [$error_msg]";
}
set_error_handler("my_error_handler");
echo (5 / 0);
?>

Apri l'URL http://localhost/phptuts/custom_error_handler.php otterrai i seguenti risultati

. Gestione degli errori PHP


Come puoi vedere dall'esempio precedente, i gestori di errori personalizzati sono potenti nel senso che

  • Ci permettono di personalizzare i messaggi di errore.
  • Il gestore degli errori personalizzato può anche includere la registrazione degli errori in un file/database, l'invio di e-mail allo sviluppatore, ecc.

Diamo ora un'occhiata al terzo tipo di gestione degli errori. Utilizzeremo la funzione PHP integrata error_reporting function. Ha la seguente sintassi di base

<?php
error_reporting($reporting_level);
?>

QUI,

  • “error_reporting” è la funzione di segnalazione degli errori PHP
  • "$reporting_level" è facoltativo e può essere utilizzato per impostare il livello di reporting. Se non è stato specificato alcun livello di segnalazione, PHP utilizzerà il livello di segnalazione errori predefinito specificato nel file php.ini.
Livello di segnalazione Descrizione Esempio
E_AVVERTENZA Visualizza solo i messaggi di avviso. Non interrompe l'esecuzione dello script segnalazione_errori(E_AVVERTIMENTO);
E_NOTICE Visualizza avvisi che possono verificarsi durante la normale esecuzione di un programma o potrebbero essere un errore. error_reporting(E_AVVISO);
E_USER_ERROR Visualizza gli errori generati dall'utente, ovvero il gestore degli errori personalizzato report_errori(E_USER_ERROR);
E_USER_WARNING Visualizza i messaggi di avviso generati dall'utente report_errori(E_USER_WARNING);
E_USER_NOTICE Visualizza gli avvisi generati dall'utente error_reporting(E_USER_NOTICE);
E_RECOVERABLE_ERRORE Visualizza gli errori che non sono irreversibili e che possono essere gestiti utilizzando gestori di errori personalizzati report_errori(E_RECOVERABLE_ERROR);
E_TUTTI Visualizza tutti gli errori e gli avvisi report_errori(E_ TUTTI);

Differenza tra errori ed eccezioni

  • Le eccezioni vengono generate e destinate a essere rilevate mentre gli errori sono generalmente irrecuperabili.
  • Le eccezioni vengono gestite in modo orientato agli oggetti. Ciò significa che quando viene generata un'eccezione, viene creato un oggetto eccezione contenente i dettagli dell'eccezione.

La tabella seguente mostra i metodi dell'oggetto eccezione

Metodo Descrizione Esempio
getMessage () Visualizza il messaggio dell'eccezione
<?php
echo $e->getMessage();
?>
ottenere il codice() Visualizza il codice numerico che rappresenta l'eccezione
<?php
echo $e->getCode();
?>
prendi il file() Visualizza il nome del file e il percorso in cui si è verificata l'eccezione
<?php
echo $e->getFile();
?>
getLine() Visualizza il numero di riga in cui si è verificata l'eccezione
<?php
echo $e->getLine();
?>
getTrace() Visualizza una matrice del backtrace prima dell'eccezione
<?php
print_r( $e->getTrace());
?>
ottieniPrecedente() Visualizza l'eccezione precedente a quella corrente
<?php
echo $e->getPrevious();
?>
getTraceAsString() Visualizza il backtrace dell'eccezione come una stringa anziché come un array
<?php
echo $e->getTraceAsString();
?>
__accordare() Visualizza l'intera eccezione come stringa
<?php
echo $e->__toString();
?>


Di seguito è riportata la sintassi di base per generare un'eccezione.

<?php
throw new Exception("This is an exception example");
?>

QUI,

  • "throw" è la parola chiave utilizzata per generare l'eccezione
  • "new Exception(...)" crea un oggetto eccezione e passa la stringa "Questo è un esempio di eccezione" come parametro del messaggio.

Il codice sopra riportato genera il seguente messaggio.

Gestione delle eccezioni PHP in PHP

Vedremo ora un esempio che implementa le eccezioni Throw e Catch.

Modificheremo l'esempio sopra e includeremo provare, lanciare e riprendere.

La sintassi di base è la seguente.

<?php
try {
    //code goes here that could potentially throw an exception
}
catch (Exception $e) {
    //exception handling code goes here
}
?>

QUI,

  • “try{…}” è il blocco di codice da eseguire che potrebbe potenzialmente sollevare un'eccezione
  • "catch(Exception $e){...}" è il blocco di codice che cattura l'eccezione generata e assegna l'oggetto eccezione alla variabile $e.

Il codice seguente mostra l'esempio di eccezione di base con l'eccezione try, Throw e Catch implementata.

Il programma lancia deliberatamente un'eccezione che poi intercetta.

<?php
try {
    $var_msg = "This is an exception example";
    throw new Exception($var_msg);
}
catch (Exception $e) {
    echo "Message: " . $e->getMessage();
    echo "";
    echo "getCode(): " . $e->getCode();
    echo "";
    echo "__toString(): " . $e->__toString();
}
?>

Apri l'URL http://localhost/phptuts/exception_handling.php Otterrai i seguenti risultati.

Gestione delle eccezioni PHP in PHP

È anche possibile creare più eccezioni per un'istruzione php try a seconda del tipo di eccezione lanciata.

Vedi l'articolo su MySQL, Accesso ai dati PHP... per esempi di implementazione di più eccezioni

Eccezioni multiple

Le eccezioni multiple utilizzano più blocchi try catch per gestire le eccezioni generate. Eccezioni multiple sono utili quando;

  • Si desidera visualizzare un messaggio personalizzato a seconda dell'eccezione generata
  • Si desidera eseguire un'operazione univoca a seconda dell'eccezione generata

Il diagramma di flusso seguente illustra il funzionamento di più eccezioni

Eccezioni multiple

Diamo un'occhiata a un esempio che utilizza più eccezioni.

Modificheremo il codice che divide un numero per il denominatore passato.

Ci aspettiamo che si verifichino due tipi di eccezioni;

  • Divisione per zero
  • Divisione per un numero negativo

Per semplicità, mostreremo solo il tipo di eccezione nei nostri blocchi catch.

La classe Exception incorporata in PHP viene utilizzata per generare eccezioni.

Creeremo due classi che estendono la classe di eccezione e le utilizzeremo per generare eccezioni.

Il codice seguente mostra l'implementazione.

<?php
class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};
function process($denominator)
{
	try
	{
		if ($denominator == 0)
		{
			throw new DivideByZeroException();
		}
		else if ($denominator < 0)
		{
			throw new DivideByNegativeException();
		}
		else
		{
			echo 25 / $denominator;
		}
	}
	catch (DivideByZeroException $ex)
	{
		echo "DIVIDE BY ZERO EXCEPTION!";
	}
	catch (DivideByNegativeException $ex)
	{
		echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!";
	}
	catch (Exception $x)
	{
	echo "UNKNOWN EXCEPTION!";
	}
}
process(0);
?>

Testare il codice

Supponiamo che tu abbia salvato multiple_exception.php nella cartella phptuts.

Passare all'URL http://localhost/phptuts/multiple_exceptions.php

Gestione delle eccezioni PHP in PHP

Tornare al file PHP e passare -1 come parametro, come mostrato nel diagramma seguente.

Gestione delle eccezioni PHP in PHP

Passare all'URL http://localhost/phptuts/multiple_exceptions.php.

Che risultati ottieni? Passa 3 come parametro.

Che risultati ottieni?

Sommario

  • Gli errori sono risultati imprevisti prodotti dal codice PHP
  • La gestione degli errori migliora le prestazioni dell'applicazione
  • PHP ha funzioni integrate che possono essere utilizzate per personalizzare il modo in cui PHP segnala gli errori
  • Le eccezioni sono come gli errori, ma possono essere catturate utilizzando il blocco catch quando vengono lanciate.
  • La visualizzazione di messaggi di errore che mostrano informazioni sull'errore è considerata una cattiva pratica di sicurezza.