PHP - Eccezioni

L'Interfaccia Throwable

In PHP, le eccezioni sono oggetti che rappresentano condizioni eccezionali. Vengono lanciate quando si verifica un errore specifico nel tuo codice. PHP fornisce l'interfaccia Throwable, che è la classe base per tutte le eccezioni e gli errori. Ha diversi metodi che ti permettono di gestire le eccezioni in modo efficace.

PHP - Exceptions

Gestione di Base delle Eccezioni

Per gestire le eccezioni in PHP, puoi utilizzare il blocco try-catch. Ecco un esempio:

<?php
try {
// Codice che potrebbe lanciare un'eccezione
throw new Exception("Si è verificato un errore!");
} catch (Exception $e) {
// Codice per gestire l'eccezione
echo "Eccezione catturata: " . $e->getMessage();
}
?>

In questo esempio, utilizziamo la dichiarazione throw per creare un nuovo oggetto Exception con un messaggio personalizzato. Se un'eccezione viene lanciata all'interno del blocco try, l'esecuzione del codice salta al blocco catch corrispondente, dove l'eccezione viene catturata e gestita.

set_exception_handler

La funzione set_exception_handler ti permette di definire una funzione personalizzata che verrà chiamata ogni volta che viene lanciata un'eccezione non catturata. Questa funzione dovrebbe accettare due parametri: l'oggetto eccezione e un booleano che indica se l'eccezione è stata lanciata durante una chiamata a eval().

Ecco un esempio di come utilizzare set_exception_handler:

<?php
function myExceptionHandler($exception) {
echo "Eccezione non catturata: " . $exception->getMessage();
}

set_exception_handler('myExceptionHandler');

// Codice che lancia un'eccezione
throw new Exception("Ops! Qualcosa è andato storto.");
?>

In questo esempio, definiamo una funzione di gestione delle eccezioni personalizzata chiamata myExceptionHandler. Utilizziamo poi set_exception_handler per impostare questa funzione come gestore delle eccezioni predefinito. Quando viene lanciata un'eccezione non catturata, la nostra funzione personalizzata verrà chiamata invece della predefinita.

Eccezioni SPL

PHP fornisce diverse classi di eccezione predefinite nella Standard PHP Library (SPL). Queste classi estendono la classe Exception e forniscono informazioni più specifiche su diversi tipi di eccezioni. Alcune delle eccezioni SPL comuni includono:

  • BadFunctionCallException: Lanciata quando un callback si riferisce a una funzione non definita o se mancano alcuni argomenti.
  • DomainException: Utilizzata per errori nella logica del dominio della tua applicazione.
  • InvalidArgumentException: Sollevata quando una funzione riceve un argomento che non accetta.
  • LengthException: Utilizzata quando un'operazione tenta di utilizzare un oggetto di lunghezza errata.
  • OutOfBoundsException: Lanciata quando un indice di array è fuori dai limiti.
  • OutOfRangeException: Sollevata quando un valore non è all'interno dell'intervallo previsto.
  • RangeException: Utilizzata quando un valore non è all'interno dell'intervallo specificato.
  • RuntimeException: Eccezione di uso generale per errori a runtime.
  • UnderflowException: Lanciata quando si verifica un underflow (ad esempio, sottrarre da una stack vuota).
  • UnexpectedValueException: Sollevata quando un valore non corrisponde al tipo atteso.

Puoi utilizzare queste eccezioni SPL nel tuo codice come faresti con qualsiasi altra classe di eccezione. Per esempio:

<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("La divisione per zero non è permessa.");
}
return $a / $b;
}

try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Eccezione catturata: " . $e->getMessage();
}
?>

Eccezione Definita dall'Utente

Oltre a utilizzare le eccezioni SPL predefinite, puoi anche creare le tue classi di eccezione personalizzate. Per fare questo, simply estendi la classe Exception e aggiungi qualsiasi funzionalità aggiuntiva di cui hai bisogno. Ecco un esempio:

<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}

try {
throw new MyCustomException("Questa è un'eccezione personalizzata.");
} catch (MyCustomException $e) {
echo "Eccezione personalizzata catturata: " . $e->getMessage();
}
?>

In questo esempio, creiamo una nuova classe chiamata MyCustomException che estende la classe Exception. Poi lanciamo e catturiamo un'istanza di questa eccezione personalizzata come faremmo con qualsiasi altra eccezione.

Seguendo queste linee guida e utilizzando gli strumenti forniti, puoi gestire efficacemente le eccezioni nel tuo codice PHP e assicurarti che le tue applicazioni siano robuste e resilienti contro errori imprevisti. Ricorda sempre di testare il tuo codice a fondo e gestire le eccezioni con grazia per fornire una migliore esperienza utente.

Credits: Image by storyset