54

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

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

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

4

2 に答える 2

112

PHP5には2つの例外が組み込まれています

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

  • DOMExceptionDOM操作は、特定の状況、つまり論理的な理由で操作を実行できない場合に例外を発生させます。
  • IntlException彼のクラスは、intl関数内でエラーが発生したときに例外を生成するために使用されます。このような例外は、intl.use_exceptionsが有効になっている場合にのみ生成されます。
  • PharExceptionPharクラスで作業するときにスローされます
  • ReflectionExceptionReflectionクラスで作業するときにスローされます

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

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

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

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

PHP7.3ではJSON例外が導入されています。

  • JsonExceptionjson_encode()エラーが発生したときにスローされjson_decode()ます。

PHP 8では、次の1つの新しい例外が導入されています。

  • ValueError有効な型を持っているが操作に使用できない関数に値を渡すと、がスローされます。

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

\Throwable
├── \Exception (implements \Throwable)
|   |── \DOMException (extends \Exception)
|   ├── \IntlException (extends \Exception)
|   ├── \JsonException (extends \Exception)
|   |── \PharException (extends \Exception)
|   |── \ReflectionException (extends \Exception)
|   |── \ValueError (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)
于 2012-05-31T17:22:02.683 に答える
21

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

技術的には、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 http://web.archive.org/web/20130829124146/http://www.php .net /〜helly / php / ext / spl / classException.html(2013年8月29日にアーカイブ)

アップデート

上記のリンクは無効です。これは、基本的なPHP例外階層の図でした。オリジナルが見つかりませんでしたが、これが代替品です。

PHP例外階層

元々はhttp://fossies.org/dox/php-5.2.17/classException.htmlにありましたが、現在はhttp://web.archive.org/web/20151002165210/https://fossies.org/dox/にアーカイブされています。 php-5.2.17 / classException.html(2015年10月2日にアーカイブ)

于 2012-05-31T17:23:29.617 に答える