カテゴリ: PHP 更新日: 2026/01/06

PHPのset_exception_handlerを完全ガイド!初心者でも理解できる例外処理カスタマイズ

PHP の set_exception_handler() を使った例外処理のカスタマイズ
PHP の set_exception_handler() を使った例外処理のカスタマイズ

先生と生徒の会話形式で理解しよう

生徒

「PHPでエラーじゃなくて“例外”が発生したときに、自分の好きな処理をさせることってできるんですか?」

先生

「できますよ。PHPには set_exception_handler() という特別な機能があり、プログラム中で未処理の例外が発生したとき、自分で作った関数を呼び出せます。」

生徒

「なるほど!普通のエラーとは違うんですよね?どんな場面で使うんですか?」

先生

「たとえばデータベース接続が失敗したときに、画面にはエラーを見せず、内部だけでログを記録したり、管理者にメールで通知したりできます。では詳しく解説していきましょう。」

-

1. PHPのset_exception_handlerとは?

1. PHPのset_exception_handlerとは?
1. PHPのset_exception_handlerとは?

set_exception_handler() は、PHPで例外処理(Exception)をカスタマイズするための関数です。 通常、例外が発生するとプログラムはそこで止まり、エラーメッセージが画面に表示されます。 しかし本番環境でエラーメッセージがユーザーに表示されると、セキュリティリスクにつながるだけでなく、ユーザー体験も悪くなります。

そこで set_exception_handler() を使うことで、 未処理の例外が発生したときに「自動で呼ばれる自作の処理」を登録できます。 これにより、例外の記録、メール通知、カスタム画面の表示など、柔軟な対応が可能になります。

2. set_exception_handlerの基本的な使い方

2. set_exception_handlerの基本的な使い方
2. set_exception_handlerの基本的な使い方

基本の流れはとてもシンプルで、自分で例外を処理する関数を作り、それを set_exception_handler() に登録するだけです。


function myExceptionHandler($exception) {
    error_log("例外発生: " . $exception->getMessage());
    echo "問題が発生しました。時間をおいて再度お試しください。";
}

set_exception_handler("myExceptionHandler");

// テスト用に例外を発生
throw new Exception("テスト例外");

このコードを実行すると、例外が発生しても画面に生々しいエラーは表示されず、 「問題が発生しました」というメッセージだけがユーザーに見えます。 そして内部ではログに保存されているため、後からエラーの内容を確認できます。

3. 例外(Exception)とは?エラーとの違いをわかりやすく解説

3. 例外(Exception)とは?エラーとの違いをわかりやすく解説
3. 例外(Exception)とは?エラーとの違いをわかりやすく解説

初心者がつまずきやすいポイントとして「エラーと例外の違い」があります。 エラーは「プログラムが正しく動かない状態」のことで、PHPが自動で発生させます。 一方、例外は「開発者が意図的に発生させることができる特別なエラー」のようなものです。

たとえば「買い物かごが空なのに購入処理をしようとした」など、プログラムの条件が満たされていないときに例外を投げることができます。


if (empty($cart)) {
    throw new Exception("カートが空です");
}

4. set_exception_handlerに渡される例外の情報

4. set_exception_handlerに渡される例外の情報
4. set_exception_handlerに渡される例外の情報

例外ハンドラーには $exception が渡されます。 このオブジェクトからは次の情報を取得できます。

  • 例外メッセージ($exception->getMessage()
  • 例外が起きたファイル名($exception->getFile()
  • 例外が起きた行番号($exception->getLine()
  • 例外の種類(クラス名)(get_class()

これらを組み合わせることでログ出力を強化したり、重要な内容を管理者に通知できます。

-

5. 実務でよく使うカスタム例外ハンドラー

5. 実務でよく使うカスタム例外ハンドラー
5. 実務でよく使うカスタム例外ハンドラー

実務では、例外発生を「ログに保存する」「管理者にメールを送る」「ユーザーには安全な画面を表示する」の3つを同時に行うことが多いです。


function customExceptionHandler($exception) {

    $log = "[" . date("Y-m-d H:i:s") . "] "
        . $exception->getMessage()
        . " (" . $exception->getFile() . ":" . $exception->getLine() . ")\n";

    error_log($log, 3, __DIR__ . "/exception.log");

    echo "<h2>現在システムに問題が発生しています。</h2>";
}

set_exception_handler("customExceptionHandler");

// 例外発生
throw new Exception("データベースに接続できませんでした");

このコードでは、

  • 例外の詳細をログへ保存
  • ユーザーには安全なメッセージのみ表示
  • プログラムの強制終了を防ぐ

という処理を行っています。

6. set_exception_handlerを使う際の注意点

6. set_exception_handlerを使う際の注意点
6. set_exception_handlerを使う際の注意点

● 注意1:catchされなかった例外だけ処理できる

set_exception_handler() は「try...catchで捕まえられなかった例外」だけ処理します。 逆に言えば、catchしてしまうとハンドラーは動きません。

● 注意2:Fatal Errorは処理できない

エラーと例外は別物なので、Fatal Error(致命的エラー)はこのハンドラーでは扱えません。 Fatal Error対応には register_shutdown_function() を組み合わせる方法があります。

● 注意3:本番環境では絶対にエラーメッセージを見せない

内部の構造を外部に見せるのはセキュリティリスクです。 例外ハンドラーでは、画面にはやさしいメッセージだけ出すようにしましょう。

7. set_error_handlerとの違い

7. set_error_handlerとの違い
7. set_error_handlerとの違い

初心者の方は「エラー」と「例外」の違いで混乱しがちです。 そこで簡単に整理します。

set_error_handler() Notice / Warning などPHPのエラーを処理
set_exception_handler() 未処理の例外(Exception)を処理

多くのアプリでは、この2つを組み合わせて「エラーも例外も安全に処理できる環境」を整えます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.7
Java&Spring記事人気No7
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-