1. PHP

PHPでエラー処理を学ぼう!try-catchと例外の基本を解説

Share

PHPを使った開発では、予期しないエラーを安全に処理する仕組みが必要です。

そのために使われるのが「例外処理(try-catch)」です。

この記事では、try-catch構文の基本から、例外を投げる(throwする)方法まで、初心者向けにわかりやすく解説します。

そもそも「例外処理」とは?

通常のエラー処理(if文など)では想定外の状況に対応しきれないことがあります。

例外処理は「エラー発生時に処理の流れを変え、適切に対応する」ための仕組みです。

例外を使うと、エラーが起きた時に「try-catchブロック」に処理が移り、エラーを補足して安全に処理を続行できます。

try-catch の基本構文

try {
    // エラーが発生する可能性のある処理
    $result = divide(10, 0);
    echo '結果: ' . $result;
} catch (Exception $e) {
    // エラーが発生した場合の処理
    echo 'エラーが発生しました: ' . $e->getMessage();
}
  • try ブロック:通常処理を記述。ここでエラーが発生するとcatchに移る。
  • catch ブロック:例外が発生した場合の処理を記述。

例外を投げる(throw)

自分でエラーを検知した場合に例外を投げたい場合は throw を使います。

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

この関数では、$bが0のときに Exception を投げます。呼び出し元でtry-catchを使うことで安全に扱えます。

Exceptionクラスについて

PHPの例外は Exception クラスのインスタンスとして扱われます。

catchではこのExceptionオブジェクトを $e などの変数で受け取り、$e->getMessage() でエラーメッセージを取得できます。

例:

catch (Exception $e) {
    echo 'エラー詳細: ' . $e->getMessage();
}

Exceptionクラスの便利なメソッド

PHPのExceptionクラスには、例外発生時に役立つさまざまなメソッドが用意されています。例外処理を行う際は、これらを活用して詳細情報を取得するのがおすすめです。

  • getMessage()
    例外のメッセージを取得します。例外発生の原因をユーザーやログに伝えるのに便利です。
  • getCode()
    例外に設定されたコード(整数)を取得します。独自の例外コードを利用して、処理を分岐させることもできます。
  • getFile()
    例外が発生したファイルのパスを取得します。エラー箇所の特定に役立ちます。
  • getLine()
    例外が発生した行番号を取得します。ファイルと合わせてデバッグに有用です。
  • getTrace()
    スタックトレースを配列で取得します。どの処理を辿って例外に至ったか確認できます。
  • getTraceAsString()
    スタックトレースを文字列として取得します。ログ出力やメール通知に便利です。
  • getPrevious()
    ネストした例外を取得できます。複数の例外を連鎖的に処理する場合に使います。
  • __toString()
    Exceptionオブジェクトを文字列として出力する際に呼ばれます。エラーログにまとめて出力したい場合などに便利です。

例:getMessageとgetTraceAsStringを使った詳細なエラーログ

try {
    throw new Exception("予期しないエラーが発生しました", 1001);
} catch (Exception $e) {
    error_log("例外メッセージ: " . $e->getMessage());
    error_log("ファイル: " . $e->getFile() . ' 行: ' . $e->getLine());
    error_log("トレース:\n" . $e->getTraceAsString());
}

これらのメソッドを活用することで、例外発生時の原因調査やユーザー向けメッセージの表示をより適切に行えます

独自の例外クラスを作る

PHPではExceptionを継承して独自の例外クラスを作成できます。用途別に例外を作るとエラーハンドリングがしやすくなります。

class MyCustomException extends Exception {}

try {
    throw new MyCustomException('独自の例外が発生しました');
} catch (MyCustomException $e) {
    echo 'カスタム例外: ' . $e->getMessage();
}

複数のcatchを使う

複数のcatchを用意することで、例外の種類に応じて処理を変えられます。

try {
    // 処理
} catch (MyCustomException $e) {
    echo 'カスタム例外: ' . $e->getMessage();
} catch (Exception $e) {
    echo 'その他の例外: ' . $e->getMessage();
}

まとめ

  • try-catchはエラー処理の基本。コードを安全に保つために必須。
  • throwで意図的に例外を発生させられる。
  • Exceptionクラスを使えばエラーメッセージや種類を柔軟に管理できる。

try-catchを使いこなして、安全なコードを書けるようになりましょう!

参考リンク