finallyコマンド

ブロックfinallyは、tryおよびcatch構文と組み合わせて例外を処理するために使用されます。finally内のコードは、tryブロックの成功時にも例外発生時にも、いずれの場合も実行されます。

構文

phptry {
  // 例外を引き起こす可能性のあるコード
} catch (Exception $e) {
  // 例外の処理
} finally {
  // いずれの場合も実行されるコード
}

例

コードが正常に実行される例:

php<?php
try {
  $res = 10 / 2;
  echo "Result: " . $res . "\n";
} catch (Exception $e) {
  echo "Exception: " . $e->getMessage() . "\n";
} finally {
  echo "This will always execute\n";
}
?>

コードの実行結果:

phpResult: 5
This will always execute

例

例外処理の例:

php<?php
try {
  $res = 10 / 0;
  echo "Result: " . $res . "\n";
} catch (Exception $e) {
  echo "Exception: " . $e->getMessage() . "\n";
} finally {
  echo "This will always execute\n";
}
?>

コードの実行結果:

phpException: Division by zero
This will always execute

例

リソース解放のためのfinallyの使用:

php<?php
$file = fopen("example.txt", "r");
try {
  // ファイル操作
  if ($file) {
    echo "File opened successfully\n";
  }
} catch (Exception $e) {
  echo "Exception: " . $e->getMessage() . "\n";
} finally {
  if ($file) {
    fclose($file);
    echo "File closed in finally block\n";
  }
}
?>

コードの実行結果:

phpFile opened successfully
File closed in finally block

関連項目

  • 例外処理に使用されるtry構文
  • すべての例外の基底クラスであるExceptionクラス