例外の投げ方とキャッチ

PHPのエラー処理において、「例外の投げ方とキャッチ(throw と try-catch 構文)」は、予期しない状況(例:無効な入力やファイルの読み込み失敗など)に対処するための重要な手法です。以下に詳しく説明します。


1. 例外の基本構文

PHPで例外処理を行うには、主に次の3つのキーワードを使用します:

  • throw: 例外を投げる

  • try: 例外が発生する可能性のあるコードを囲む

  • catch: 発生した例外を受け取って処理する


2. 例外の投げ方(throw)

PHPでは、throw キーワードを使って Exception クラスのインスタンスを投げることができます。

php
throw new Exception("エラーメッセージ");

php
function divide($a, $b) { if ($b === 0) { throw new Exception("0で割ることはできません。"); } return $a / $b; }

この関数では、0で割ろうとしたときに例外が発生します。


3. 例外のキャッチ(try-catch)

try ブロック内で例外が投げられると、catch ブロックがその例外を受け取って処理します。

php
try { // 例外が発生する可能性のあるコード } catch (Exception $e) { // 例外が発生したときの処理 }

php
try { echo divide(10, 0); } catch (Exception $e) { echo "エラー発生: " . $e->getMessage(); }

このコードは「エラー発生: 0で割ることはできません。」と表示されます。


4. 複数の例外のキャッチ

PHP 7以降では、複数の異なる例外クラスを | を使って一度にキャッチできます。

php
try { // ... } catch (ExceptionType1 | ExceptionType2 $e) { // 複数の型に共通の処理 }

または、個別に catch ブロックを複数書くことも可能です。


5. 自作の例外クラス

PHPでは Exception クラスを継承して独自の例外クラスを定義できます。

php
class CustomException extends Exception {} try { throw new CustomException("カスタムエラー発生"); } catch (CustomException $e) { echo "カスタム例外キャッチ: " . $e->getMessage(); }

6. finally ブロック(必要に応じて)

try-catch に加えて finally ブロックを使うと、例外の有無に関係なく常に実行したい処理(例:リソース解放)を書くことができます。

php
try { // ... } catch (Exception $e) { // ... } finally { // 常に実行される処理 }

まとめ

構文 目的
throw 例外を発生させる
try 例外が発生する可能性のある処理を囲む
catch 発生した例外を捕捉し、適切に処理する
finally 例外の有無にかかわらず必ず実行される処理

生成日:2025/05/03