web-dev-qa-db-ja.com

PHP例外コードは何のために必要ですか?使用例のシナリオはありますか?

さて、それは多くの人にとって非常に不自由な質問ですが、私は圧倒的な反応があることを願っています:)

PHPで例外をスローすると、メッセージにコードを追加できます。
例外をキャッチし、そのタイプに従って処理します(InvalidArgumentExceptionまたはOutOfBoundExceptionのように)。 messageをログに記録するか、表示するか、適切な処理を行います。
エラーの原因へのパスを追跡するために、前の例外を追加することもできます。

しかし、私が一度も使用したことがない、またはまったく考えたことのない1つのこと:codeはどれほど便利ですか?

例えば:

throw new Exception("db Error", $code, $previousException);

$codeで何ができますか?

43
Rahul Prasad

メッセージはユーザーに表示するためのもので、コードはプログラムで使用するためのものです。たとえば、「データベースエラー」の例では、次のような一連のコードを作成できます。

  1. 接続できません
  2. クエリ中のエラー
  3. 空の結果
  4. 接続を閉じるときにエラーが発生しました

次に、適切なコードを使用します。次に、コードの他の部分で例外が発生すると、何が起こったかがわかり、インテリジェントに処理できる可能性があります。

40

どうやって $codeは、例外タイプに依存して解釈されます。たとえば、MySQLデータベースエラーを表すExceptionサブクラスがある場合、$codeは、ネイティブのMySQLエラーコードである可能性があります。低レベルのIOエラーの場合、これは <errno.h>

基本的に、 $codeには、プログラムで例外を処理するために必要なものがすべて含まれている必要があります。ほとんどの例外は、どこかで処理されることを意図しています。すべての例外が単にエラーとして表示される場合は、$codeは、MySQLクライアントライブラリなどのライブラリからのエラーコードを含める必要がある場合にのみ役立ちます。

14
D.Shawley

オブジェクト指向言語では、例外のタイプはそれがどんなタイプのエラーであるかを伝えます。ただし、たとえば、同じ例外タイプを生成できるものが2つある場合は、エラーコードを使用して詳細を示すことができます。

エラーコードは、非オブジェクト指向言語で広く使用されている機能であり、エラーの種類を伝えます。

3
Razan Paul

$codeがHTTPステータスコードとして使用される実装(CakePHP)を見てきました。

例外のサブセットを使用してその概念を実装しました。したがって、スローされるすべての例外はHttpExceptionから拡張され、HTTPエラーで応答します。

3
Koen.

私は個人的にコードを使用して、ユーザーがサポートに送信できる圧縮されたエラーメッセージを取得します。たとえば、ユーザーが認証を試みて失敗したとすると、私のコードはAuthenticateExceptionをスローし、メッセージFailed to authenticateと、失敗の背後にある実際の問題を示す特定のコードが表示されます。ユーザーには認証メッセージとコードのみが表示されるため、認証が失敗した本当の理由はわかりません。その後、必要に応じて、サポートチームにコードを連絡することをお勧めします。

例外コードに基づいて、サポート担当者は認証が失敗した本当の理由(無効なパスワード、存在しないユーザー名、アカウントの一時停止など)を簡単に特定し、それに応じてユーザーを支援することができます。

0
Adam Baranyai