私は W3schools で例外について勉強しています このリンクで、見出しの直前のリンク内:
「例外の再スロー」
次のような文があります。
「スローされた例外がクラス customException のものであり、customException キャッチがなく、基本例外キャッチのみがあった場合、例外はそこで処理されます。」
誰かがこの文の例を教えていただければ、とても感謝しています。
私は W3schools で例外について勉強しています このリンクで、見出しの直前のリンク内:
「例外の再スロー」
次のような文があります。
「スローされた例外がクラス customException のものであり、customException キャッチがなく、基本例外キャッチのみがあった場合、例外はそこで処理されます。」
誰かがこの文の例を教えていただければ、とても感謝しています。
基本的に、キャッチするように設定されたcatchステートメントがない場合customException
、一般的なcatchステートメントにフォールスルーすると彼らは言っていますException
。
customException
この例では、明示的に設計されているため、最初の catch ステートメントがキャッチします。
try {
// fail
throw new customException();
}
catch (customException $e) {
// catch custom exception
}
catch (Exception $e) {
// catch any uncaught exceptions
}
次の例では、その節に一般的なException
catch ブロックがないため、代わりにそれをキャッチします。
try {
// fail
throw new customException();
}
catch (Exception $e) {
// catch any uncaught exceptions
}
PHP マニュアルのこのページの例 #2 を見てください。
また、w3schools は PHP を学ぶのに最適な場所ではありません。エラーで (悪名高い) 有名な場所です。
次のように定義されたカスタム例外があるとします
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 タイプをキャッチする限り、それは引き続きキャッチされるということです。
この例には 2 つのcatch
ブロックがあります。最初のキャッチのみcustomException
。次のものはすべてをキャッチしますException
。最初のブロックが何かをキャッチすると、2 番目のブロックには到達しません。しかし、 acustomException
は の例でもあるので、最初のブロックException
がなければそこに引っかかっていたでしょう。catch
このようにして、最初のキャッチがそれをキャッチし、実行が 2 番目に到達することはありません。
それまでの間、私が上に投稿したリンクと、w3schools が悪い考えである理由をお読みください。