ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【PHP】引数の型不一致エラー TypeError は Exception では拾えない

問題

以下のようなコードで catch で拾っているはずと思っていたエラーがそもそも拾えていませんでした。

try {
 // ここで関数の型不一致エラー発生
} catch (Exception $e) {
 // キャッチしたエラーをログに出力
}

原因

関数の型が不一致だった場合に発生するTypeErrorExceptionクラスではなく、Errorクラスを継承しているので上記のコードではキャッチできないのが原因でした。

そもそもエラーであって例外ではないのでこれでキャッチできないのは当たり前ですね…
あまりちゃんと意識したことがなかったので少し戸惑いました。

対処

そもそもエラーを握りつぶすのは違うので今回は別の方法で対処しましたが、以下のように書けばどちらでもキャッチできます。

 catch (Exception | TypeError $e) {