Eccezioni
Cosa sono le eccezioni
Sezione intitolata “Cosa sono le eccezioni”Un’eccezione segnala che qualcosa e andato storto e il flusso normale non puo continuare.
Non tutti gli errori sono uguali. Un file mancante puo essere una situazione prevista da gestire. Una variabile scritta male e 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 passa al catch.
Puoi lanciare tu 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 se tutto va bene sia se c’e 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 puo incontrare e gestire: connessione fallita, file mancante, 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 questo e utile. In produzione, invece, evita di mostrare dettagli tecnici agli utenti.
Eccezioni personalizzate
Sezione intitolata “Eccezioni personalizzate”Per programmi piccoli puoi usare le eccezioni gia pronte, come RuntimeException o InvalidArgumentException. Nei progetti piu grandi puoi creare eccezioni con nomi specifici.
<?phpclass ProdottoNonDisponibile extends RuntimeException {}Il nome rende piu 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 piu difficile da correggere.