例外クラス
Exception | すべての例外の基底クラス。 | |||
ErrorException | エラー例外。 | |||
LogicException | ロジックの誤り。 | |||
BadFunctionCallException | 関数呼び出しの問題(未実装、引数不足等) | |||
BadMethodCallException | メソッド呼び出しの問題(未実装、引数不足等) | |||
DomainException | 型は正しいが値が不正。 | |||
InvalidArgumentException | 引数の型が不正。 | |||
LengthException | 長さが不正。 | |||
OutOfRangeException | 無効なインデックス。 | |||
RuntimeException | 実行時の問題。 | |||
OutOfBoundsException | 配列・連想配列のキーが不正。 | |||
OverflowException | これ以上要素を追加できない。 | |||
PDOException | PDOに関わる問題。 | |||
RangeException | 型は正しいが、値が不正。 | |||
UnderflowException | これ以上要素を削除できない。 | |||
UnexpectedValueException | 戻り値が不正。 |
独自の例外クラス
独自の例外クラスを作成するなら、次の要件に従っておくと良い。
- Exceptionクラスを継承すること。
- クラス名の接尾辞はExceptionとすること。
- アプリが複数の例外を持つ場合には、アプリ独自例外を意味するインターフェイスを用意しておき、他の例外はこれを実装すること。(クラスへのタグ付けを目的としたインターフェイスのことをマーカーインターフェイスと呼んだりする)
privateメソッドではassert文をtry-catch文の代わりに使う
privateメソッドのように、呼び出し元が特定されていて信用できる場合は、
検査 + 例外スローの手続きは不要。
代わりにassert文で引数が満たすべき条件を宣言すると良い。
assert命令は条件が満たされていない場合に、エラー・警告を投げる。
下記が使用例
<?php
function getTest(int $i1, int $i2) : int {
assert($i1 > 0 && $i2 > 0);
return $i1 + $i2;
}
assert文はphp.iniで動作を変更できる。(下記はphp.iniでの項目と概要)
- zend.assertions
assert文を有効にするかどうかを決定する。
設定値 → 1:コードを生成して実行(開発モード。既定)
設定値 → 0:コードを生成するが、実行時にはスキップ。
設定値 → -1:コードを生成しない(本番モード) - assert.exception
例外を投げるかどうか決定する。
設定値 → 0:警告を生成(PHP 7.4 以前の既定)
設定値 → 1:AssertError または 引数$description の例外をスロー(PHP 8 以降の既定)