ホームページ  >  記事  >  バックエンド開発  >  PHPのエラーと例外の違いは何ですか

PHPのエラーと例外の違いは何ですか

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-23 16:19:531730ブラウズ

エラーと例外の違いについては、インターネット上では Java で説明されている情報がほとんどです。PHP の例外処理も Java と似ているようです。エディタを見ながら違いとエラーの捉え方を学んでいきましょうPHPの例外となりますので、必要な方は参考にしてください。

PHPのエラーと例外の違いは何ですか

JSON 解析コードを作成します。データ ソースはそれが JSON であることを保証できないため、解析が失敗する可能性があります。ただし、PHP の json_decode は、解析できない文字列が見つかった場合でもエラーを報告せず、直接何も返しません。たとえ解析できたとしても、内部のフィールドが常に一貫しているとは信じられません。したがって、JSON に解析できるかどうかだけでなく、フィールドが欠落しているかどうかも判断する必要があります。怠惰のため、たとえば、catch

非オブジェクトのプロパティを取得しようとしています

ただし、次の try catch のように例外をキャッチしたいと思います。例外をキャッチできませんでした

try {
    // Code that may throw an Exception or Error.
} catch (\Exception $t) {
    // Handle exception
}

Googleで検索したところ、PHPには例外の他にエラーという概念があり、非オブジェクトのプロパティを取得しようとすると残念ながら該当することがわかりました。エラーのカテゴリ。

PHP におけるエラーと例外の違い

PHP のエラーと例外の違いについての紹介記事をいくつか読みましたが、要点に触れていないと感じます。このデザインには何か問題があると思うので、なぜそれらの違いを知る必要があるのか​​と突然思いました。たとえば、PHP5 時代では、try catch は例外のみをキャッチできますが、エラーはキャッチできません。 PHP 5 のこのデザインの意味がまったく理解できません。 PHP7 の処理方法を見ると、私の見方が正しいことがわかります。したがって、私はそのオリジナルの設計アイデアを掘り下げることに興味がありません。

PHP 7 の新機能

今後、ほとんどのエラーは例外クラス Error を通じて報告されます。

つまり、PHP 7 starting 、 Error 、および Exception は両方とも Throwable から継承します。

Throwable の継承関係から、Error と Exception はフラットな関係にあることがわかります。

interface Throwable
  |- Error implements Throwable
      |- ArithmeticError extends Error
          |- DivisionByZeroError extends ArithmeticError
      |- AssertionError extends Error
      |- ParseError extends Error
      |- TypeError extends Error
          |- ArgumentCountError extends TypeError
  |- Exception implements Throwable
      |- ClosedGeneratorException extends Exception
      |- DOMException extends Exception
      |- ErrorException extends Exception
      |- IntlException extends Exception
      |- LogicException extends Exception
          |- BadFunctionCallException extends LogicException
              |- BadMethodCallException extends BadFunctionCallException
          |- DomainException extends LogicException
          |- InvalidArgumentException extends LogicException
          |- LengthException extends LogicException
          |- OutOfRangeException extends LogicException
      |- PharException extends Exception
      |- ReflectionException extends Exception
      |- RuntimeException extends Exception
          |- OutOfBoundsException extends RuntimeException
          |- OverflowException extends RuntimeException
          |- PDOException extends RuntimeException
          |- RangeException extends RuntimeException
          |- UnderflowException extends RuntimeException
          |- UnexpectedValueException extends RuntimeException

非オブジェクトのプロパティを取得しようとするメソッドをキャプチャします

try {
    // Code that may throw an Exception or Error.
} catch (\Throwable $t) {
    // Handle exception
}

PHP 5 と PHP 7 の両方の記述メソッドと互換性があります

try {
    // Code that may throw an Exception or Error.
} catch (\Throwable $t) {
    // Executed only in PHP 7, will not match in PHP 5.x
} catch (\Exception $e) {
    // Executed only in PHP 5.x, will not be reached in PHP 7
}

いくつかの組み込みメソッド

インターフェース Throwable

{
    public function getMessage(): string;       // Error reason
    public function getCode(): int;             // Error code
    public function getFile(): string;          // Error begin file
    public function getLine(): int;             // Error begin line
    public function getTrace(): array;          // Return stack trace as array like debug_backtrace()
    public function getTraceAsString(): string; // Return stack trace as string
    public function getPrevious(): Throwable;   // Return previous `Trowable`
    public function __toString(): string;       // Convert into string
}

例外の特定の情報を記録します

例:

エラー コード ファイル、行番号固有のエラー メッセージ エラー タイプ

より正確なキャプチャを使用するか、より広範なキャプチャを使用します

またはスコアリング状況を使用します

たとえば、MySQL の一意のインデックス例外を使用する場合、私は正確なキャプチャに慣れています。特別な処理が必要になるためです。

他のほとんどの場合は、Throwable を広く捉えるだけだと思います。その理由は、try catch は通常、ロジックに影響を与えない確率の低い例外などの例外を無視するために使用されるためです。これを処理する必要はないため、ログが記録されている限り、特定の例外はそれほど重要ではありません。

推奨学習: php ビデオ チュートリアル

以上がPHPのエラーと例外の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsunzhongwei.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。