環境
PHP 7.4.0 CLI
Throwable
は、PHP5系では利用できないとのこと
発生した問題
稼働しているアプリのログにたまにFatalエラーが記録されている。
原因を探るため、Fatalエラーが発生した場合にtry~catch
でデバッグ用の処理を実行し、怪しい変数をvar_dump()
してエラーログに吐きたい。
try~catch
でエラーハンドリングするようにしたが、以前同じFatalエラーが出力され、エラーハンドリングできていないようにみえる。
解決策
\Exception
ではなく、\Throwable
を利用する。
https://stackoverflow.com/questions/12928487/php-try-catch-and-fatal-error
https://www.php.net/manual/en/class.throwable.php
エラーは基本的に握りつぶさず、修正すべき
Exception、Fatalエラーを全部補足できる\Throwable
は便利だと感じましたが、
Error はアプリケーションのロジック中で発生させたり、捕捉したりしてはいけません。これは、言語上とても基本的な何かが間違っているという問題をプログラマーに教えるためにあります。なので、迂闊な例外処理に紛れてしまわないようになっています。
https://qiita.com/tanakahisateru/items/e3e24f3825c4ba0c60e6#error
とあるように、常用するものではないようです。
関連記事
https://qiita.com/hnw/items/4e2d47d269a26025a726
https://qiita.com/jonsumisu/items/54a95d848f2dcf9cfde4
https://qiita.com/mpyw/items/c69da9589e72ceac470c
https://qiita.com/tanakahisateru/items/e3e24f3825c4ba0c60e6
あとがき
今回、cronでTwitterAPIを1分ごとに叩く処理だったんですが、RateLimitに引っかかった際のレスポンスを想定していなかったため、数十分に一度エラーが発生するという状況になっていました。
Throwableでエラーをcatchしてレスポンスの内容をvar_dump()
することで、レスポンスの内容を確認することができました。