php:尝试捕获不捕获所有异常

2022-08-30 08:37:46

我正在尝试执行以下操作:

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%都没有发生任何不好的事情,这似乎无效。


答案 1
try {
  // call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
  // handle $e
} catch (\Exception $e) { // For PHP 5
  // handle $e
}

答案 2

解决方案#1

使用 ErrorException 将错误转换为要处理的异常:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

解决方案#2

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;
}

推荐