4

シャットダウン関数で例外がスローされ、try/catch ブロック内でキャッチされません。次に例を示します。

<?php

set_exception_handler(function($e){
    echo "exception handled"; // not echoed
});

register_shutdown_function(function(){
    throw new Exception("test"); // this should be caught by the exception handler above, but it doesn't
});

Live run.

上記のコードを実行すると、次のようになります。

致命的なエラー: メッセージ 'test' で例外 'Exception' をキャッチできませんでした

ただし、 PHP マニュアルは次のように主張しています。

set_exception_handlerは、例外が try/catch ブロック内でキャッチされない場合に、デフォルトの例外ハンドラーを設定します。exception_handlerが呼び出された後、実行は停止します。

exception_handlerスローされた例外をキャッチしないのはなぜですか?

4

1 に答える 1

0

対象外なので…

http://www.php.net/manual/en/function.register-shutdown-function.php

スクリプトの実行が終了するか exit() が呼び出された後に実行されるコールバックを登録します。

スクリプトの実行が終了し、実際にシャットダウンしているため、ハンドラーを削除している必要があります。

于 2014-03-28T19:54:47.013 に答える