我在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";
1)任何人都可以解释一下为什么最后一行不会显示?是因为E_USER_ERROR
打破了脚本执行吗?
2)如果我使用set_error_handler
注册我的自定义错误处理程序但未在其中显示exit
或die
,最后一行会显示该怎么办?
答案 0 :(得分:2)
E_USER_ERROR
,默认情况下会停止应用程序。如果您触发E_USER_WARNING
或更小的错误,程序将继续。E_USER_ERROR
并决定不 die
。答案 1 :(得分:2)
该错误会以@
静默执行,因为E_USER_ERROR
是致命错误。尝试在没有错误抑制操作符的情况下运行该示例 - 它将打印:
PHP致命错误:第3行的/tmp/test.php让我感到羞耻
致命错误:第3行的/tmp/test.php让我感到羞耻
当然,自定义错误处理程序可以决定继续执行。