我在PHP手册站点上发现了以下示例:
Some might think that trigger_error is like a throw() or an err.raise construction, and @ works like catch(){} one - in fact it's NOT.
function badgirl(){
trigger_error("shame on me",E_USER_ERROR);
return true;
}
$sheis = @badgirl();
echo "You will never see this line - @ only supress message, not a control flow";
谁能告诉我为什么最后一行不显示?是因为E_USER_ERROR
中断脚本执行吗?2)如果我用set_error_handler
注册了自定义错误处理程序,并且没有在其中做exit
或die
,会显示最后一行吗?
-
这个错误中断了
@
的执行,因为E_USER_ERROR
是一个致命的错误。试着在没有错误抑制操作符的情况下运行这个例子-它将打印:PHP致命错误:shame on me in/tmp/test.php on line 3
致命错误:shame on me in/tmp/test.php on line 3
关于错误常数的更多信息请参阅此处
-
当然,自定义错误处理程序可以决定继续执行。
- 是的,程序会停止的原因是你触发了
E_USER_ERROR
,默认情况下它会停止应用程序。如果触发E_USER_WARNING
或更小的错误,程序将继续。 是的,自定义错误处理程序可以捕获
E_USER_ERROR
并决定而不是 die
。