【发布时间】:2014-12-06 18:17:25
【问题描述】:
由于我的代码中的递归函数,我遇到了异常,由于我正在编码的性质,可以忽略异常并返回 FALSE。所以这里有一些简化的代码来说明我的问题。
function recursive() {
try{ recursive(); }
catch(Exception $e)
{ echo "Error Caught!"; }
}
recursive();
我似乎无法捕捉到“已达到 '100' 的最大函数嵌套级别,正在中止!”例外。 我是否误解了 try-catch 的工作原理?
【问题讨论】:
-
是
exception吗?我以为是error,然后是fatal error;所以除非你有一个可以将fata错误转换为异常的错误处理程序,否则它无法被捕获 -
我不是 PHP 专家,所以我不知道这是否适用。但也许优化器将递归变成了循环,因为如果不考虑异常,递归就是尾递归,因此可以进行最后调用优化,从而将其变成循环。
-
是的,我认为 Mark 有,我不知道不能像这样捕获错误。
-
错误和异常有很大不同;虽然可以捕获异常,但不能捕获错误......可以使用自定义 error handler 将一些错误转换为异常,但 PHP 不能以任何方式捕获致命错误,因为它们是致命的
-
是的,我实际上无法从错误中恢复。有趣的是,我更容易修复导致异常的原因而不是捕获它。
标签: php function exception nested try-catch