set_exception_handler
PHP Manual
PHP Manual»エラー処理関数»set_exception_handler

set_exception_handler

(PHP 5, PHP 7, PHP 8)

set_exception_handler — ユーザー定義の例外ハンドラ関数を設定する

説明

function set_exception_handler(?callable $callback): ?callable

例外が try/catch ブロックの中でキャッチされなかった場合の デフォルトの例外ハンドラを設定します。 実行は、callback がコールされた後に 停止します。

注意:

例外ハンドラの実行中は、有効な例外ハンドラが存在しない状態になります。 PHP 8.3.0 以降のエンジンは、ハンドラがスローした例外が再びそのハンドラに 渡されないよう、ハンドラを呼び出す前にその設定を解除するからです。 そのため、ハンドラの中から set_exception_handler() を コールすると、前に定義されたハンドラは存在しないと報告されます。

さらに PHP 8.3.5 以降のエンジンは、呼び出そうとしているハンドラを ハンドラスタックにプッシュします。 そのため、ハンドラの中から restore_exception_handler() を コールすると、その前に有効だったハンドラではなく、 現在実行中のハンドラが再度設定されます。

実行中のハンドラは、リターンする際に自動的に再度設定されます。 ただし、その時点で有効な例外ハンドラが存在しない場合に限ります。 ハンドラが set_exception_handler() または restore_exception_handler() をコールした時点で、 この自動的な復元は行われなくなり、 ハンドラ自身が設定したままのハンドラが有効になります。

したがって、例外ハンドラの中から例外ハンドラを変更することは推奨されません。

パラメータ

callback

キャッチされない例外が発生した際にコールされる関数。 このハンドラ関数は、スローされる Throwable オブジェクトを引数にとります。 Error と Exception は、 どちらも Throwable インターフェイスを実装しています。 ハンドラのシグネチャは、次のようになります。

function handler(Throwable $ex): void

null を渡すと、このハンドラをデフォルトの状態に戻せます。

戻り値

前に定義された例外ハンドラを返します。 エラー発生時に null を返します。 前にハンドラが定義されていない場合にも null が返されます。

変更履歴

バージョン 説明
8.3.5 呼び出される例外ハンドラがハンドラスタックにプッシュされ、 リターンした時点で再度設定されるようになりました。 ただし、ハンドラ自身がスタックを変更した場合は除きます。
8.3.0 有効な例外ハンドラが、実行中は設定解除されるようになりました。 そのため、ハンドラの中から set_exception_handler() を コールすると、前に定義されたハンドラは存在しないと報告されます。

例

例1 set_exception_handler() の例

<?php
function exception_handler(Throwable $exception) {
  echo "Uncaught exception: " , $exception->getMessage(), "\n";
}

set_exception_handler('exception_handler');

throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>

参考

To Top