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

php:尝试捕获不捕获所有异常,php,exception,try-catch,Php,Exception,Try Catch,我正在努力做到以下几点: 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不是预期的格式),我

我正在努力做到以下几点:

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%的情况下都不会发生坏事,这似乎是无效的。

Solution#1 用于将错误转换为异常以处理:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
解决方案#2
我发现的越短:

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

使所有错误成为可捕获的实例
ErrorException

可以使用
catch(Throwable$e)
捕获所有异常和错误,如下所示:

catch(可丢弃的$e){
$msg=$e->getMessage();
}

还可以为catch中的
$e
参数定义多种类型:

试试看{
//只是一个例子
$time='错误的数据类型';
$timestamp=日期(“Y-m-d H:i:s”,$time);
}捕获(异常|类型错误$e){
返回false;
}

这是因为异常并不是在PHP中普遍实现的。它们是PHP5的一个附加项,很少有内置函数会抛出它们。相反,您需要验证大多数函数的返回值。注意:1)如果不希望在整个应用程序中普遍引发异常来代替错误,则可以在可以使用恢复所需和常规错误处理的位置启用此功能。2) 我希望#2仍然会发出警告。同样的概念也适用:错误报告级别可以随更改,然后再更改。无论如何都必须抛出警告。它们是您必须保存在某处的信息。如果您不想看到它,只需关闭
error_display
Solution#2是Js的工作方式。。。如果您知道自己在做什么就好了后续问题:在MVC应用程序中使用解决方案#1好吗?我觉得全局使用它违背了异常的目的,而反复使用
restore\u error\u handler()。我不会依赖全局php设置来正确处理应用程序最终的实际运行方式。请稍作解释。感谢您提供的这段代码片段,它可能会提供一些有限的即时帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请您的回答添加一些解释,包括您所做的假设。@YvetteColomb,哦,这里有一个幽灵,它消除了我的观点!!!;-)但我仍然相信有些问题可能只有一个词的答案。问题
4+4的答案是什么?
一个非常简短的答案可以不加解释地添加,只有一个词:
2
,那么我们为什么要写:“你的问题的4+4陈述的正确答案是2…!”同样,我也同意回答中更详细的解释。但我的意思是,只有其中的一部分。这个简单的答案就是我所需要的。但我不确定4+4=2。是的,这是严重不足的文件,你几乎不会注意到它,如果你很幸运,并来到这两个和链接。。。因为应该包含以下内容的内容:-甚至不包含单词Throwable(在文档部分中)。
set_error_handler(function($errno, $errstr, $errfile, $errline ){
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
try {
  // call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
  // handle $e
} catch (\Exception $e) { // For PHP 5
  // handle $e
}