Il comando finally

Il blocco finally viene utilizzato insieme alle costruzioni try e catch per la gestione delle eccezioni. Il codice all'interno di finally verrà eseguito in ogni caso - sia in caso di esecuzione riuscita del blocco try, sia in caso di generazione di un'eccezione.

Sintassi

phptry {
  // Codice che potrebbe generare un'eccezione
} catch (Exception $e) {
  // Gestione dell'eccezione
} finally {
  // Codice che verrà eseguito in ogni caso
}

Esempio

Esempio con esecuzione riuscita del codice:

php<?php
try {
  $res = 10 / 2;
  echo "Risultato: " . $res . "\n";
} catch (Exception $e) {
  echo "Eccezione: " . $e->getMessage() . "\n";
} finally {
  echo "Questo verrà sempre eseguito\n";
}
?>

Risultato dell'esecuzione del codice:

phpRisultato: 5
Questo verrà sempre eseguito

Esempio

Esempio con gestione di un'eccezione:

php<?php
try {
  $res = 10 / 0;
  echo "Risultato: " . $res . "\n";
} catch (Exception $e) {
  echo "Eccezione: " . $e->getMessage() . "\n";
} finally {
  echo "Questo verrà sempre eseguito\n";
}
?>

Risultato dell'esecuzione del codice:

phpEccezione: Division by zero
Questo verrà sempre eseguito

Esempio

Utilizzo di finally per liberare le risorse:

php<?php
$file = fopen("example.txt", "r");
try {
  // Lavoro con il file
  if ($file) {
    echo "File aperto con successo\n";
  }
} catch (Exception $e) {
  echo "Eccezione: " . $e->getMessage() . "\n";
} finally {
  if ($file) {
    fclose($file);
    echo "File chiuso nel blocco finally\n";
  }
}
?>

Risultato dell'esecuzione del codice:

phpFile aperto con successo
File chiuso nel blocco finally

Vedi anche

  • la costruzione try,
    che viene utilizzata per la gestione delle eccezioni
  • la classe Exception,
    che è la classe base per tutte le eccezioni