Eccezioni
Cosa sono le eccezioni
Sezione intitolata “Cosa sono le eccezioni”Un’eccezione segnala che qualcosa è andato storto e il flusso normale non può continuare.
Non tutti gli errori sono uguali. Un file mancante può essere una situazione prevista da gestire; una variabile scritta male è invece un bug da correggere.
try e catch
Sezione intitolata “try e catch”Metti nel blocco try il codice che potrebbe fallire. Nel blocco catch gestisci il problema.
<?phptry { $pdo = new PDO($dsn, $utente, $password); echo "Connessione riuscita";} catch (PDOException $errore) { echo "Connessione non riuscita";}Se la connessione fallisce, PHP esegue il blocco catch.
Puoi lanciare un’eccezione quando trovi una situazione non valida.
<?phpfunction dividi(float $a, float $b): float { if ($b === 0.0) { throw new InvalidArgumentException("Non puoi dividere per zero"); }
return $a / $b;}finally
Sezione intitolata “finally”finally viene eseguito comunque, sia quando tutto va bene sia quando c’è un’eccezione.
<?phptry { echo "Apro una risorsa";} catch (Exception $errore) { echo "Errore";} finally { echo "Pulizia finale";}Errore previsto o bug?
Sezione intitolata “Errore previsto o bug?”Usa le eccezioni per casi che il programma può incontrare e gestire: connessione fallita, file mancante o dato non valido.
Correggi invece i bug alla radice: nomi sbagliati, parentesi mancanti, logica errata. Un catch non deve nascondere codice rotto.
Recuperare il messaggio dell’eccezione
Sezione intitolata “Recuperare il messaggio dell’eccezione”L’oggetto ricevuto nel catch contiene informazioni sull’errore.
<?phptry { throw new RuntimeException("File non trovato");} catch (RuntimeException $errore) { echo $errore->getMessage();}Output:
File non trovatoDurante lo studio è utile. In produzione evita invece di mostrare dettagli tecnici agli utenti.
Eccezioni personalizzate
Sezione intitolata “Eccezioni personalizzate”Per programmi piccoli puoi usare le eccezioni già pronte, come RuntimeException o InvalidArgumentException. Nei progetti più grandi puoi creare eccezioni con nomi specifici.
<?phpclass ProdottoNonDisponibile extends RuntimeException {}Il nome rende più chiaro che tipo di problema stai gestendo.
Errore comune: catturare tutto e continuare
Sezione intitolata “Errore comune: catturare tutto e continuare”Un catch non deve far finta che vada tutto bene. Se non sai gestire davvero l’errore, registra il problema o mostra un messaggio chiaro. Nascondere l’errore rende il programma più difficile da correggere.