(PHP 5, PHP 7, PHP 8)
restore_exception_handler — 以前の例外ハンドラ関数を回復する
set_exception_handler() を使用して例外ハンドラ関数を 変更した後、元の例外ハンドラ(組込またはユーザー定義関数)に戻すために 使用されます。
注意:
例外ハンドラの実行中は、有効な例外ハンドラが存在しない状態になります。 PHP 8.3.0 以降のエンジンは、ハンドラがスローした例外が再びそのハンドラに 渡されないよう、ハンドラを呼び出す前にその設定を解除するからです。
さらに PHP 8.3.5 以降のエンジンは、呼び出そうとしているハンドラを ハンドラスタックにプッシュします。 そのため、例外ハンドラの中から restore_exception_handler() を コールすると、そのエントリが取り除かれ、現在実行中のハンドラが再度設定されます。 その前に有効だったハンドラを設定するには、2 回コールする必要があります。
実行中のハンドラは、リターンする際に自動的に再度設定されます。 ただし、その時点で有効な例外ハンドラが存在しない場合に限ります。 set_exception_handler() または restore_exception_handler() をコールしたハンドラは、 ハンドラスタックの管理を自分自身で行うことになります。
この関数にはパラメータはありません。
常に true を返します。
| バージョン | 説明 |
|---|---|
| 8.3.5 | 呼び出される例外ハンドラが、ハンドラスタックにプッシュされるようになりました。 そのため、例外ハンドラの中から restore_exception_handler() を コールすると、現在実行中のハンドラが再度設定されます。 その前に有効だったハンドラに戻すには、2 回コールする必要があります。 |
| 8.3.0 | 有効な例外ハンドラが、実行中は設定解除されるようになりました。 |
例1 restore_exception_handler() の例
<?php
function exception_handler_1(Exception $e)
{
echo '[' . __FUNCTION__ . '] ' . $e->getMessage();
}
function exception_handler_2(Exception $e)
{
echo '[' . __FUNCTION__ . '] ' . $e->getMessage();
}
set_exception_handler('exception_handler_1');
set_exception_handler('exception_handler_2');
restore_exception_handler();
throw new Exception('This triggers the first exception handler...');
?>上の例の出力は以下となります。
[exception_handler_1] This triggers the first exception handler...