php中的异常处理...我注意到一些怪癖似乎使得实现正确的繁琐。首先,大多数遗留的php函数本身不会抛出异常,似乎必须实现set_error_handler并具有回调throw函数。好。轻微的烦恼,但让我们看看是什么给。哦!好的,现在一切都抛出异常,当然,最糟糕的部分:未捕获的异常会停止脚本。
所以,在阅读手册和其他帖子后,必须要考虑一下,必须实现set_exception_handler,并且还要使用set_error_handler回调不要抛出E_NOTICE,E_WARNING。
到目前为止这是正确的吗?在重新阅读联机帮助页后,似乎set_exception_handler会在每个错误上暂停脚本,甚至是无法的可恢复脚本,以便脚本继续运行。
所以这对我来说似乎不行,我不能让脚本停止执行通知或事件警告。
有解决方法吗?我很想知道别人如何处理异常和这些问题。
答案 0 :(得分:3)
Larry Ullman在他的“PHP 5 Advanced(一本好书)”一书中写道,这是一个例外处理程序 它打击了你所说的大部分内容
function my_error_handler ($e_number, $e_message, $e_file, $e_line, $e_vars)
{
global $debug, $contact_email;
$message = "An error occurred in script '$e_file' on line $e_line: \n<BR />$e_message\n<br />";
$message .= "Date/Time: " . date('n-j-Y H:i:s') . "\n<br />";
$message .= "<pre>" . print_r ($e_vars, 1) . "</pre>\n<BR />";
if ($debug)
{
echo '<p class="error">'.$message.'</p>';
}
else
{
error_log($message, 1,$contact_email);
if (($e_number != E_NOTICE) && ($e_number < 2048))
{
echo '<p class="error">A system error occurred. We apologize for the inconvenience.</p>';
}
}
}
set_error_handler('my_error_handler');
注意:我刚输入此内容,可能是拼写错误。
您需要定义变量$ debug(如果为true,将错误消息打印到网页),并联系电子邮件(如果$ debug为false,则向该地址发送有关错误的电子邮件)。
答案 1 :(得分:2)
您必须编写错误处理程序以检查生成的错误级别,并根据该错误决定是否抛出异常。
set_error_handler的第二个参数允许您指定将触发处理程序的错误级别。处理程序的第一个参数是错误级别编号,因此您可以在处理程序中检查它。