throw
と throw new Exception()
例外処理では、throw
と throw new Exception()
の使用効果には大きな違いがあります。それぞれの行動を詳しく見てみましょう:
throw
: 元の例外情報を保持します
throw
ステートメントは、現在アクティブな例外を再スローします。 catch
ブロック内で使用すると、元の例外のタイプ、メッセージ、スタック トレースが保持されます。これにより、例外は変更されずに伝播し続けることができます。
<code>try { ... } catch { throw }</code>
このシナリオでは、try
ブロックで例外が発生すると、catch
ブロックは元の情報をそのままにして同じ例外を再スローします。
throw new Exception()
: スタック トレースをリセット
一方、throw new Exception(message)
は、指定されたメッセージを含む新しい例外インスタンスを作成します。このアクションによりスタック トレースがリセットされ、catch
ブロックの前に発生したすべてのトレース情報が削除されます。
<code>try{ ... } catch(Exception e) {throw new Exception(e.message) }</code>
この例では、try
ブロックで例外が発生すると、catch
ブロックは元の例外のメッセージを含む新しい例外を作成しますが、スタック トレースは catch
ブロック自体から開始されます。
throw ex
catch
ブロック内で throw ex
を使用しないことを強くお勧めします。これを行うと、元の例外が伝播されますが、スタック トレースはリセットされます。このため、例外の原因のデバッグが非常に困難になります。
カスタム例外の作成
場合によっては、追加情報を提供するためにすべての例外をカスタム例外オブジェクトでラップすることが必要になる場合があります。これを行うには、4 つの例外コンストラクターすべてを含む、Exception
を継承する新しい例外クラスを定義します。必要に応じて、元の例外と追加情報を受け入れる追加のコンストラクターを追加できます。カスタム例外をスローするときは、必ず元の例外を内部例外パラメーターとして渡して、そのスタック トレースやその他のプロパティを保持してください。
以上が例外処理における「throw」と「throw new Exception()」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。