私は次のことをしようとしています:
try {
// just an example
$time = 'wrong datatype';
$timestamp = date("Y-m-d H:i:s", $time);
} catch (Exception $e) {
return false;
}
// database activity here
要するに、データベースに入れる変数をいくつか初期化します。何らかの理由で初期化が失敗した場合-例$ timeは予期される形式ではないため、メソッドがfalseを返し、間違ったデータをデータベースに入力しないようにします。
ただし、このようなエラーは「catch」ステートメントではなく、グローバルエラーハンドラーによってキャッチされます。そして、スクリプトは続行します。
これを回避する方法はありますか?すべての変数の99%で何も悪いことが起こらないことを考えると、すべての変数を手動で型チェックする代わりに、このようにすればもっときれいになると思いました。
ErrorException を使用して、エラーを例外に変換して処理します。
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
try {
// just an example
$time = 'wrong datatype';
if (false === $timestamp = date("Y-m-d H:i:s", $time)) {
throw new Exception('date error');
}
} catch (Exception $e) {
return false;
}
try {
// call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
// handle $e
} catch (\Exception $e) { // For PHP 5
// handle $e
}
私が見つけた短いもの:
set_error_handler(function($errno, $errstr, $errfile, $errline ){
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
すべてのエラーをキャッチ可能なErrorException
のインスタンスにします