PHPにおけるバグと例外の階層構造と対処方法の違いを理解する

環境

  • PHP 8.1

バグと例外の階層構造

masayan
masayan

前提として、バグと例外の違いは以下の通りです。

  • どちらも、期待する処理に失敗することを意味するが、
    • バグは、何度試しても失敗する
    • 成功したり失敗したりする
Throwable
 Error
   ArithmeticError
      DivisionByZeroError
   AssertionError
   CompileError
      ParseError
   FiberError
   TypeError
      ArgumentCountError
   UnhandledMatchError
   ValueError
 Exception
   ClosedGeneratorException
   DOMException
   ErrorException
   IntlException
   JsonException
   LogicException
      BadFunctionCallException
         BadMethodCallException
      DomainException
      InvalidArgumentException
      LengthException
      OutOfRangeException
   PharException
   ReflectionException
   RuntimeException
      OutOfBoundsException
      OverflowException
      PDOException
      RangeException
      UnderflowException
      UnexpectedValueException
   SodiumException

対処方法の違い

  • バグ系統のErrorおよびExceptionのうちのRuntimeException以外はtry-catchでキャッチすべきでない
    • InvalidArgumentExceptionなど
    • これらの本質は、構文エラーやロジックのエラーなど、本来コード修正をするべきプログラムエラーであるため(catchしたとしても、問題を先延ばしにしているだけに過ぎない)
  • RuntimeExceptionは、プログラム自体は正しいが、以下のようなケースで外部の要因により生じる例外のため、それに応じた例外処理を実装しておくべきである
    • データベースへの接続に失敗(PDOException)
      • 数回リトライするなど。
    • ユーザーから不正なインプットを受け取った (UnexpectedValueException)
      • 422のバリデーションエラーをブラウザ側に返却し、キャッチしてエラーページを表示する等

PHP学習におすすめの書籍

独習PHP 第4版 [ 山田 祥寛 ]
楽天ブックス
¥ 3,740(2023/02/01 22:54時点)
タイトルとURLをコピーしました