PHP: 5 Gestione degli errori in php: La Guida Essenziale per un Codice Robusto

PHP: 5 Gestione degli errori in php: La Guida Essenziale per un Codice Robusto

Qualsiasi programmatore commette errori: fa parte del processo di sviluppo. Quindi una corretta gestione degli errori in PHP è essenziale, sia per individuarli velocemente in fase di sviluppo, sia per prevenirli in produzione.

PHP mette a disposizione diverse funzionalità per l’error handling e la gestione delle eccezioni, che aiutano a rendere le applicazioni più robuste e sicure. In questa guida analizziamo i vari tipi di errori, come gestirli e come utilizzare le eccezioni per avere un maggiore controllo sul flusso del codice.

Tipi di errori in PHP

Gli errori in PHP vengono classificati principalmente in tre categorie: Fatal Error, Warning e Notice.

Gestione degli errori in php

Errori Fatali (Fatal Error)

Gli errori fatali sono i più gravi: impediscono al codice PHP di continuare l’esecuzione.
Un esempio comune è la chiamata a una funzione non definita.

<?php
  // PHP Fatal Error: Call to undefined function my_function()
  my_function();
?>

Quando si verifica un Fatal Error, lo script si interrompe immediatamente e viene mostrato un messaggio di errore.

Warning

I Warning (possono essere essere considerati come degli avvisi) indicano un problema che non blocca completamente il codice, ma può causare malfunzionamenti.
Un esempio è il passaggio di un numero errato di argomenti a una funzione.

<?php
  // PHP Warning: function call with wrong number of arguments
  my_function(1, 2, 3);
?>

Lo script continua a funzionare, ma il warning viene segnalato.

Notice

I Notice segnalano condizioni anomale, spesso meno gravi.
Un esempio tipico è l’utilizzo di una variabile non definita.

<?php
  // PHP Notice: Undefined variable
  echo $undefined_var;
?>

In questo caso l’esecuzione prosegue, ma il messaggio avvisa il programmatore di un possibile bug.

Tabella completa degli errori PHP

PHP mette a disposizione una serie di costanti predefinite che identificano i vari tipi di errori. Ecco l’elenco completo:

CostanteDescrizioneCodice
E_ERRORErrore fatale di runtime1
E_WARNINGAvviso di runtime non fatale2
E_PARSEErrore di parsing del codice sorgente4
E_NOTICENotifica di runtime non fatale8
E_CORE_ERRORErrore fatale del motore interno di PHP16
E_CORE_WARNINGAvviso non fatale del motore interno di PHP32
E_COMPILE_ERRORErrore fatale in compilazione64
E_COMPILE_WARNINGAvviso non fatale in compilazione128
E_USER_ERRORErrore fatale generato dall’utente256
E_USER_WARNINGAvviso non fatale generato dall’utente512
E_USER_NOTICENotifica generata dall’utente1024
E_STRICTAvviso per uso di funzioni deprecate2048
E_RECOVERABLE_ERRORErrore fatale recuperabile4096
E_DEPRECATEDAvviso per funzioni deprecate8192
E_USER_DEPRECATEDAvviso deprecato generato dall’utente16384

Tipi di errore predefiniti

Funzione error_reporting() per una corretta gestione degli errori in php

La funzione error_reporting() permette di specificare a php quali errori devono essere mostrati.

Esempio:

<?php
// Mostra solo errori fatali e warning
error_reporting(E_ERROR | E_WARNING);

// Mostra tutti gli errori
error_reporting(E_ALL);
?>

Si possono combinare più tipi di errori usando gli operatori logici (| OR, & AND, ~ NOT).

Visualizzazione degli errori in ambiente di sviluppo e produzione

  • Ambiente di sviluppo: è utile mostrare tutti gli errori a video in modo che il programmatore possa avere tutte le informazioni necessarie per poter risolvere il problema.
  • Ambiente di produzione: In ambiente di produzione è meglio nasconderli all’utente finale poiché se chi riceve i dettagli dell’errore fosse malintenzionato potrebbe aver accesso ad informazioni riservate e quindi sfruttare qualche falla nel sistema aumentando i rischi.

È possibile configurarlo con:

<?php
ini_set("display_errors", 0); // Nasconde errori a video
?>

In produzione gli errori dovrebbero essere registrati nei log del server, non mostrati agli utenti.

Gestione delle eccezioni in PHP

Oltre agli errori, PHP permette di gestire situazioni anomale tramite le eccezioni. Le eccezioni consentono di intercettare e trattare gli errori in modo elegante e modulare, separando la logica dell’applicazione dalla gestione degli errori.

Struttura try-catch-finally

<?php
try {
    // Codice che potrebbe generare un'eccezione
    $result = 100 / 0;
} catch (Exception $e) {
    echo "Errore: " . $e->getMessage();
} finally {
    echo "Fine esecuzione";
}
?>
  • try: contiene il codice potenzialmente pericoloso.
  • catch: gestisce l’eccezione lanciata.
  • finally: viene sempre eseguito, utile per cleanup (chiusura file, connessioni DB…).

Creazione di eccezioni personalizzate

È possibile definire classi di eccezioni personalizzate estendendo la classe Exception:

<?php
class CustomException extends Exception {}

try {
    throw new CustomException("Errore personalizzato");
} catch (CustomException $e) {
    echo "Gestito: " . $e->getMessage();
}
?>

Questa tecnica è molto utile per gestire in modo specifico determinati errori, migliorando leggibilità e manutenibilità del codice.

Differenze tra PHP 5 e PHP 7 nella gestione degli errori

  • In PHP 5, una divisione per zero genera un Fatal Error.
  • In PHP 7, 100/0 restituisce INF, mentre 0/0 restituisce NAN.

Questo comportamento riduce gli arresti improvvisi dell’applicazione, ma rende ancora più importante una corretta gestione degli errori.

Conclusione

La gestione degli errori in PHP è un aspetto essenziale per scrivere applicazioni robuste e professionali. Attraverso error_reporting, la configurazione degli errori in produzione, e l’uso di eccezioni (standard o personalizzate), puoi costruire codice più sicuro, leggibile e manutenibile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *