【发布时间】:2021-04-20 12:08:52
【问题描述】:
如果我有以下代码:
try {
//call function a
$object->function_a();
//call function b
$object->function_b();
//call function c
$object->function_c();
}
catch(Exception $e) {
$error->track_error();
}
如何捕捉语法错误,比如有人将 function_b() 名称更改为不存在的 function_d()。
似乎 try 和 catch 不能捕捉语法错误,如果没有 if 语句来检查是否有问题,它就无法工作。
但是如果我可以预料到 if 语句会出错,为什么我需要 try 和 catch,我可以写这样的东西:
if(//something is false) {
$error->track_error();
}
我正在寻找的东西会在整个 try 范围内创建一个异常并跳转到一个 catch 块,当发生任何 php 错误(包括语法)时,捕获它,然后使用 error_get_last() 或获取详细信息db 内部错误记录的类似功能。
这可能吗?
【问题讨论】:
-
调用未定义的函数不是语法错误。真正的语法错误(使代码无法解释的错误)不能被 try-catch 块捕获,因为在代码执行之前就抛出了语法错误。问题是,语法错误是什么意思?是真实的,还是您在指其他类型的错误时不小心使用了“语法错误”这个表达?
-
那么你如何捕捉语法错误,比如';'不存在的错误,或者致命错误,例如不存在的函数,或者您无法使用 if-else 条件预测的任何意外错误?
-
您无法捕获语法错误(例如缺少分号)。为了捕捉它,代码必须运行。但它无法运行,因为它有语法错误,无法解释。其他类型见how to catch a fatal error。
-
期望能够在错误所在的同一个文件中捕获语法错误,这与期望溺水者能够通过他们的自己的头发……不,当然那行不通。您需要脚本来执行才能捕获任何东西,但它不会执行,因为它包含语法错误。怎么可能不知道什么是第 22 条军规?