Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我没赶上这个';最大嵌套函数';PHP中的异常?_Php_Function_Exception_Nested_Try Catch - Fatal编程技术网

为什么可以';我没赶上这个';最大嵌套函数';PHP中的异常?

为什么可以';我没赶上这个';最大嵌套函数';PHP中的异常?,php,function,exception,nested,try-catch,Php,Function,Exception,Nested,Try Catch,由于代码中的递归函数,我遇到了一个异常,由于我正在编写的代码的性质,异常可以被忽略并返回FALSE。下面是som简化代码来说明我的问题 function recursive() { try{ recursive(); } catch(Exception $e) { echo "Error Caught!"; } } recursive(); 我似乎无法捕捉到“已达到100”的最大函数嵌套级别,正在中止!”例外。 我是否误解了try-catch的工作原理?因为这是一个致命错误,不是例

由于代码中的递归函数,我遇到了一个异常,由于我正在编写的代码的性质,异常可以被忽略并返回FALSE。下面是som简化代码来说明我的问题

function recursive() {
  try{ recursive(); }
  catch(Exception $e)
  { echo "Error Caught!"; }
}
recursive();
我似乎无法捕捉到“已达到100”的最大函数嵌套级别,正在中止!”例外。
我是否误解了try-catch的工作原理?

因为这是一个致命错误,不是例外,所以您不能使用try-catch

错误通常意味着程序无法继续执行,必须中止

另一方面,异常类似于警告,意味着出现了问题,但如果正确处理该异常,程序可以继续执行

try&catch的示例可以是: 尝试连接到数据库。。。函数connect引发异常,因为无法访问数据库服务器。。。捕捉异常并做出决定,然后让我们从缓存文件中读取内容。异常背后的意图是让开发人员决定是捕获异常并继续执行程序还是挂起它。

PHP致命错误:已达到最大函数嵌套级别“100”,正在中止

这是一个“致命错误”,不是例外。在PHP中,无法使用set_error_处理程序将其转换为异常(这有助于将低级错误转换为异常)

在出现“致命错误”的情况下,您唯一能做的就是使用register\u shutdown\u函数进行一些清理,在该函数中,您可以调用error\u get\u last并识别发生了此致命错误。但这就是你所能做的,没有办法继续设计程序流程


顺便说一句,只有在php.ini中启用了XDebug模块时,才会发生此致命错误。

这是一个
异常吗?我认为这是一个
错误
,而且是一个
致命错误
;所以,除非你有一个可以将fata错误转换为异常的错误处理程序,否则这是不可能的。我不是PHP专家,所以我不知道这是否适用。但可能优化器将递归转化为循环,因为如果不考虑异常,递归是尾部递归,因此可以对最后一次调用进行优化,从而将其转化为循环。是的,我认为Mark有,我不知道错误不能像这样被捕获。错误和异常非常不同;虽然可以捕获异常,但错误不能。。。。可以通过自定义将一些错误转换为异常,但是致命错误不能被PHP以任何方式捕获,因为它们是致命的。是的,我实际上无法从错误中恢复。有趣的是,对我来说,修复导致异常的原因比捕获异常更容易。