如何安排脚本执行在发出通知/警告时停止,而不改变其他行为,包括通知/警告消息,例如,没有抛出异常。
答案 0 :(得分:1)
直接回答你的问题是NO
你不能
您必须创建一个停止执行的自定义错误处理程序
因为没有办法在外面这样做。
答案 1 :(得分:0)
您可以创建自定义错误处理函数,如下所示:
<?php
// error handler function
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
switch ($errno) {
case E_USER_ERROR: exit('Im a user error.');
case E_USER_WARNING: exit('Im a user warning');
case E_USER_NOTICE:
printNotice($errno, $errstr, $errfile, $errline);
break;
default: exit('Unknown Error');
}
// don't execute PHP internal error handler
return true;
}
function printNotice($errno, $errstr, $errfile, $errline)
{
// use the following vars to output the original error
var_dump($errno, $errstr, $errfile, $errline);
exit;
}
重要的是常量:E_USER_NOTICE
和E_USER_WARNING
。
function printNotice()
显示了如何打印原始错误,
因此它看起来未修改,然后停止脚本执行退出。
所有原始错误数据(消息,行号等)都在变量中
$ errno,$ errstr,$ errfile,$ errline。 PHP使错误数据在注册的错误处理程序(此处为myErrorHandler)中自动可用。
在这个例子中,我将第二次转发所有参数,printNotice()函数,它可以不同地格式化错误或者做你喜欢的事情。
然后将其注册到set_error_handler(),如下所示:
<?php
// register your error handler
set_error_handler('myErrorHandler');
为了测试错误处理,您可以使用函数trigger_error():
trigger_error("This is a User Error", E_USER_ERROR);
trigger_error("This is a User Warning", E_USER_WARNING);
trigger_error("This is a User Warning", E_USER_NOTICE);