ど素人から毛を生やす。<延>

try-catch()でE_NOTICEやE_WARNINGをキャッチする

Web > PHP 2025年6月12日(最終更新:4日前)

どもです。

外部ライブラリを用いた開発中、一定条件でライブラリが意図的なExceptionを発するためtry_catchで囲む。
これで解決だと思っていたのですが、ライブラリは意図的なException以外にもE_NOTICEを発することがあると判明。

通常、E_NOTICEやE_WARNINGはtry-catch()で握り潰すことができません。困った。

しかし調べたところ、エラーハンドラをジャックすることでE_NOTICEやE_WARNINGもcatchできることが分かりました。

set_error_handler('errorHandlerForCatch');
try{
	//本体処理
}catch(Throwable $e) {
	//例外発生時の処理
}finally{
	restore_error_handler();
}

function errorHandlerForCatch($errno, $errstr, $errfile, $errline){
	throw new \Exception($errstr);
}

基本形はこれで良し。エラーハンドラの中身はお好みで。
本来はExceptionにならないE_NOTICEなどのエラーも、強制的にExceptionをスローさせます。


参考:
https://qiita.com/mpyw/items/c69da9589e72ceac470c
https://www.php.net/manual/ja/function.set-error-handler.php
https://qiita.com/mpyw/items/470f5f660080835f55a0

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)