【PHP】引数の型不一致エラー TypeError は Exception では拾えない
問題
以下のようなコードで catch で拾っているはずと思っていたエラーがそもそも拾えていませんでした。
try {
// ここで関数の型不一致エラー発生
} catch (Exception $e) {
// キャッチしたエラーをログに出力
}
原因
関数の型が不一致だった場合に発生するTypeError
はException
クラスではなく、Error
クラスを継承しているので上記のコードではキャッチできないのが原因でした。
そもそもエラーであって例外ではないのでこれでキャッチできないのは当たり前ですね…
あまりちゃんと意識したことがなかったので少し戸惑いました。
対処
そもそもエラーを握りつぶすのは違うので今回は別の方法で対処しましたが、以下のように書けばどちらでもキャッチできます。
catch (Exception | TypeError $e) {