0

私は W3schools で例外について勉強しています このリンクで、見出しの直前のリンク内:

「例外の再スロー」

次のような文があります。

「スローされた例外がクラス customException のものであり、customException キャッチがなく、基本例外キャッチのみがあった場合、例外はそこで処理されます。」

誰かがこの文の例を教えていただければ、とても感謝しています。

4

4 に答える 4

7

基本的に、キャッチするように設定されたcatchステートメントがない場合customException、一般的なcatchステートメントにフォールスルーすると彼らは言っていますException

customExceptionこの例では、明示的に設計されているため、最初の catch ステートメントがキャッチします。

try {
    // fail
    throw new customException();
}
catch (customException $e) {
    // catch custom exception
}
catch (Exception $e) {
    // catch any uncaught exceptions
}

次の例では、その節に一般的なExceptioncatch ブロックがないため、代わりにそれをキャッチします。

try {
    // fail
    throw new customException();
}
catch (Exception $e) {
    // catch any uncaught exceptions
}
于 2012-06-01T16:54:04.483 に答える
3

PHP マニュアルのこのページの例 #2 を見てください。

また、w3schools は PHP を学ぶのに最適な場所ではありません。エラーで (悪名高い) 有名な場所です。

于 2012-06-01T16:54:24.270 に答える
2

次のように定義されたカスタム例外があるとします

class CustomException extends Exception.

今あなたのコードのどこかに:

try
  {
  // do something that throws a CustomException
  }

catch(Exception $e) // you are only catching Exception not CustomException,
// because there isn't a specific catch block for CustomException, and
// because Exception is a supertype of CustomException, the exception will 
// still be caught here.
  {
  echo 'Message: ' .$e->getMessage();
  }

つまり、CustomException は Exception のサブクラスであるため、より具体的なサブクラス タイプの catch ブロックを使用せずにスーパークラスの Exception タイプをキャッチする限り、それは引き続きキャッチされるということです。

于 2012-06-01T16:55:37.453 に答える
2

この例には 2 つのcatchブロックがあります。最初のキャッチのみcustomException。次のものはすべてをキャッチしますException。最初のブロックが何かをキャッチすると、2 番目のブロックには到達しません。しかし、 acustomExceptionは の例でもあるので、最初のブロックExceptionがなければそこに引っかかっていたでしょう。catchこのようにして、最初のキャッチがそれをキャッチし、実行が 2 番目に到達することはありません。

それまでの間、私が上に投稿したリンクと、w3schools が悪い考えである理由をお読みください。

于 2012-06-01T16:55:37.683 に答える