どもです。
外部ライブラリを用いた開発中、一定条件でライブラリが意図的な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