我正在尝试执行以下操作:
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%的情况都没有发生任何不良事件,这似乎无效。
答案 0 :(得分:35)
使用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;
}
答案 1 :(得分:26)
try {
// call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
// handle $e
} catch (\Exception $e) { // For PHP 5
// handle $e
}
答案 2 :(得分:7)
我发现的时间越短:
set_error_handler(function($errno, $errstr, $errfile, $errline ){
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
使所有错误成为可捕捉ErrorException
答案 3 :(得分:0)
还可以为 catch 中的 $e
参数定义多种类型:
try {
// just an example
$time = 'wrong datatype';
$timestamp = date("Y-m-d H:i:s", $time);
} catch (Exception|TypeError $e) {
return false;
}
答案 4 :(得分:-1)
catch(Throwable $ e)有效
catch ( Throwable $e){
$msg = $e-> getMessage();
}