web-dev-qa-db-ja.com

PHPに組み込まれている例外のサブクラスは何ですか?

PHPに組み込まれているすべてのExceptionサブクラスのリストを見つけることはまだできていません。独自の例外サブクラスを作成する前に、意味のある組み込みのものを使用したいのです。

たとえば、InvalidArgumentExceptionが存在することはわかっていますが、JavaのNullPointerExceptionに匹敵するものはないようです。

PHPで利用可能なExceptionサブクラスのリストを持っている、またはリンクできる人はいますか?

50
Chris

PHP 5には2つの組み込み例外があります

PHP内のライブラリには、独自の組み込み例外があります

  • DOMException DOM操作では、特定の状況下、つまり論理的な理由で操作を実行できない場合に例外が発生します。
  • IntlException 彼のクラスは、intl関数内でエラーが発生したときに例外を生成するために使用されます。このような例外は、intl.use_exceptionsが有効になっている場合にのみ生成されます。
  • PharException Pharクラスを操作するときにスローされます
  • ReflectionException リフレクションクラスを操作するときにスローされます

SPLには独自の組み込み例外がいくつか含まれています

  • BadFunctionCallException コールバックは、未定義の関数を参照するか、一部の引数が欠落している場合に参照します。
  • BadMethodCallException コールバックは、未定義のメソッドを参照しているか、一部の引数が不足しています。
  • DomainException 値は、定義された有効なデータドメインに準拠していません。
  • InvalidArgumentException 渡された引数は無効です。
  • LengthException パラメータが許可された長さを超えています(文字列、配列、ファイルサイズなどに使用されます)。
  • LogicException プログラムのロジックで一般的なエラーが発生しました。
  • OutOfBoundsException 不正なインデックスが要求されました。
  • OutOfRangeException 不正なインデックスが要求されました。これは、コンパイル時に検出されるべきエラーを表しています。
  • OverflowException 完全なコンテナに要素を追加します。
  • RangeException プログラム実行中の範囲エラーを示します。通常、これはアンダー/オーバーフロー以外の算術エラーがあったことを意味します。
  • RuntimeException 実行時にのみ見つかるエラーが発生します。
  • UnderflowException 要素の削除など、空のコンテナに対して無効な操作を実行しています。
  • UnexpectedValueException 予期しない値が受信されました(つまり、メソッド呼び出しからの戻り値の結果として)。

PHP 7では、キャッチ可能なエラーを含む新しい例外が導入されています。新しい例外は次のとおりです。

  • Throwable は、PHP 7のthrowステートメントを介してスローできるすべてのオブジェクトの基本インターフェイスであり、エラーと例外を含みます。
  • Error は、すべての内部PHPエラーの基本クラスです。
  • AssertionError assert()によるアサーションが失敗するとスローされます。
  • ParseError PHPコードの解析中にエラーが発生すると、eval()が呼び出されたときなど)がスローされます。
  • TypeError TypeErrorがスローされるシナリオは3つあります。 1つ目は、関数に渡される引数の型が、対応する宣言されたパラメーターの型と一致しない場合です。 2つ目は、関数から返される値が、宣言された関数の戻り値の型と一致しない場合です。 3番目は、無効な数の引数が組み込みのPHP関数(厳密モードのみ))に渡される場所です。
  • ArithmeticError は、数学演算の実行中にエラーが発生した場合にスローされます。 PHP 7.0では、これらのエラーには、負の量でビットシフトを実行しようとすること、および整数の可能な範囲外の値になるintdiv()への呼び出しが含まれます。
  • DivisionByZeroError は、数値をゼロで除算しようとするとスローされます。
  • ArgumentCountError は、ユーザー定義の関数またはメソッドに渡される引数が少なすぎる場合にスローされます。

PHP 7.3ではJSON例外が導入されています。

  • JsonException は、json_encode()およびjson_decode()でエラーが発生するとスローされます。

PHP 7で導入された新しい階層を示すグラフは次のとおりです。

\Throwable
├── \Exception (implements \Throwable)
|   |── \DOMException (extends \Exception)
|   ├── \IntlException (extends \Exception)
|   ├── \JsonException (extends \Exception)
|   |── \PharException (extends \Exception)
|   |── \ReflectionException (extends \Exception)
│   ├── \LogicException (extends \Exception)
│   │   ├── \BadFunctionCallException (extends \LogicException)
│   │   │   └── \BadMethodCallException (extends \BadFunctionCallException)
│   │   ├── \DomainException (extends \LogicException)
│   │   ├── \InvalidArgumentException (extends \LogicException)
│   │   ├── \LengthException (extends \LogicException)
│   │   └── \OutOfRangeException (extends \LogicException)
│   └── \RuntimeException (extends \Exception)
│       ├── \OutOfBoundsException (extends \RuntimeException)
│       ├── \OverflowException (extends \RuntimeException)
│       ├── \RangeException (extends \RuntimeException)
│       ├── \UnderflowException (extends \RuntimeException)
│       └── \UnexpectedValueException (extends \RuntimeException)
└── \Error (implements \Throwable)
    ├── \AssertionError (extends \Error)
    ├── \ParseError (extends \Error)
    └── \TypeError (extends \Error)
        └── \ArgumentCountError (extends \TypeError)
    └── \ArithmeticError (extends \Error)
        └── \DivisionByZeroError extends \ArithmeticError)
99
John Conde

実は、故障して聞いたところ、なんとか見つけました。

技術的にはPHPに組み込まれている例外は2つだけです: http://www.php.net/manual/en/reserved.exceptions.php

そして、SPLはさらにいくつかを定義します: http://www.php.net/manual/en/spl.exceptions.php

彼らの階層の説明付き: http://www.php.net/~helly/php/ext/spl/classException.html

更新

上記のリンクは死んでいます、それは基本的なPHP=例外階層の図でした。私はオリジナルを見つけることができませんでしたが、これは置き換えです:

PHP Exception Hierarchy

元は http://fossies.org/dox/php-5.2.17/classException.html にあります

18
Chris