5

すべてのエラーを通常のエラー(通知、警告など)と重大なエラーに分割するエラー処理クラスを作成しました。

これで、すべてのエラーを例外に変換することをお勧めします。それはまた私のコードを短くするでしょう。

しかし、これをどのように処理するかわかりません...

  1. スクリプトの実行を停止しない例外と停止する例外はありますか?変換されたエラーを区別する方法がない場合はどうすればよいですか?
  2. エラーを例外に変換するには、set_error_handler()を呼び出し、そこに新しいErrorException()をスローします...次は何ですか?set_exception_handler()は自動的に呼び出されますか?
4

4 に答える 4

3
  1. キャッチされた例外はスクリプトを停止しません。キャッチされなかった例外はすべて停止します。

  2. いいえ、set_exception_handler()自動的に呼び出されるわけではありません。必要に応じて呼び出すことができます。

    設定した例外ハンドラーはset_exception_handler()、例外がキャッチされなくなった後に呼び出されます。これは、スクリプトが終了する前に呼び出される最後のコードです。エラー/例外が発生しないことを確認してください。そうしないと、正常に終了しません。

于 2012-11-25T17:48:49.797 に答える
2

キャッチされない例外があると、スクリプトの実行が停止します。

例外がスローされると、ステートメントに続くコードは実行されず、PHPは最初に一致するcatchブロックを見つけようとします。 例外がキャッチされない場合、ハンドラーがset_exception_handler()で定義されていない限り、PHP致命的エラーが「UncaughtException...」メッセージとともに発行されます。

これについてのドキュメントを参照してください

set_exception_handler()-自動的に呼び出されるわけではありませんが、発生した問題に対応するための最後の手段です

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

于 2012-11-25T17:49:20.973 に答える
2
  1. スクリプトの実行を停止しない例外と停止する例外はありますか?変換されたエラーを区別する方法がない場合はどうすればよいですか?

例外がキャッチされても、スクリプトの実行は停止しません。変換されたエラーを認識するには:

try {
    // ...
} catch (ErrorException $e) {
    // converted error (probably)
} catch (Exception $e) {
    // another kind of exception; this basically catches all
}

または:

function handle_exception(Exception $e)
{
    if ($e instanceof ErrorException) {
        // converted error (probably)
    } else {
        // another kind of exception
    }
}
set_exception_handler('handle_exception');

ErrorExceptionこれはどのコードでもスローされる可能性がありますが、set_error_handler()登録された関数でのみ通常のエラーを変換することを目的としていたことに注意してください。

  1. エラーを例外に変換するには、set_error_handler()を呼び出し、そこに新しいErrorException()をスローします...次は何ですか?set_exception_handler()は自動的に呼び出されますか?

ErrorExceptionエラーハンドラー関数からスローされたものがコード内の他の場所でキャッチされない場合、登録された例外ハンドラー(を使用して設定set_exception_handler())が呼び出されます。

于 2012-11-25T18:11:43.273 に答える
0

警告を例外に変換することしかできないことに注意してください。エラーハンドラーが実行されないため、エラーを例外に変換することはできません。

set_error_handler(function ($severity, $message, $file, $line) {
  echo 'You will never see this.'
});

// Provoke an error
function_that_does_not_exist();

シャットダウン機能を使用してそれらを「キャッチ」することは可能ですが、それは問題の範囲外です。

于 2016-10-24T12:38:48.823 に答える