PHP には古典的な「コンパイル時間」(または、その点について多くの静的チェックを行うコンパイラ) がありませんが、私は「コンパイル時間」を「コードを書くときに間違ったかなり静的なもの」と「」として扱います。実行時」を「私のロジック、入力、または検証はある時点でオフになっていました」として。
したがって、私の提案は、次のように扱うことです。
"Compile Time" / "OutOfRangeException"
: エラーは、ソース コードでいつでも修正できます。ロジックがなくても、ロジックがほとんどなくてもかまいません。
私はいつも 1 から 10 までの数字を取り、あなたは 11 を入れます
"Run Time" / "OutOfBoundsException"
: エラーは、実行時の誤った使用によるものです。
あなたは私を作成し、1 から 5 までの値を取り、次に 7 を入れるように言いました。計算しません。
また
必要なようにそこに配置しなかったため、そこにないインデックスを要求します
サンプル:
SplFixedArrayOutOfBoundsException
はサイズが動的であり、実行時に可能性があるため、 a のようなものCalender::getMonthName
がスローされると予想されますOutOfRangeException
。また、月の数は「コンパイル/書き込み」時に確実に固定されるため、 SplFixedArray が an をスローすることを期待します。
配列オブジェクトのサンプル:
$array が、OutOfBoundsException
これらの状況でスローできる ArrayAccess を実装するオブジェクトであるとします。
$array['bar'];
$array[7];
値は ArrayAccess に期待できるものですが、SplFixedArray(5) の場合は意味がありません。代替案は、DomainException
または多分RangeException
これらのOutOfRangeException
場合:
$calendar->getMonth(15);
配列または新しいクラスを配置すると、通常、プログラマーによる単純な「ああ、間違った変数を入力しました」エラーが原因で発生するコードに、より大きな論理上の欠陥が間違いなくあります。(おそらく好ましい)代替手段はUnexpectedValueException
and good oldInvalidArgumentException
です。
次のような場合:
$array[array()];
$array[new StdClass];
代替例外のいくつかは、より適しているようです。
Java 開発者は追加の問題に対処する必要があるため、例外が常に適用されるとは限らない場合に使用する Java の世界との比較。
チェックされた/チェックされていない例外。多くの人が、実行時例外ではないものはすべて Java での使用が非常に限られている/内部であまり使用すべきではないと主張しているため、これらの名前は本来の意味と意図の一部を失っています。