PHP try catch 异常处理

8

你好,我有这样的代码:

try
{
    // Here I call my external function
    do_some_work()
}
catch(Exception $e){}

问题是:如果do_some_work()出现问题并产生错误,这个try catch会隐藏错误吗?
3个回答

12

PHP 中有两种错误类型,分别为异常(exceptions)和错误(errors)。

try..catch 可以处理异常,但不能处理错误。

要捕获 PHP 错误,需要使用 set_error_handler() 函数

简化操作的一种方式是,在遇到错误时让 set_error_handler() 抛出一个异常。如果这样做,需要小心谨慎,因为它可能会引起各种问题,但这是一种让 try..catch 处理所有 PHP 错误的方法。


请注意,正如@hakre在他的回答中所说,set_error_handler()无法处理致命错误 - Rodolpho Freire

7

产生致命错误

不,catch语句无法捕获致命错误。即使使用错误处理程序也不行。

如果您想捕获所有其他错误,请查看ErrorException以及它与set_error_handler一起使用的相关内容:

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

/* Trigger exception */
strpos();

7
如果do_some_work()抛出异常,它将被捕获并忽略。
try/catch结构对标准PHP错误无效,只对异常有效。

你可以通过这种方式捕获PHP错误,但需要启用它。 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接