【发布时间】:2012-08-07 07:26:34
【问题描述】:
现在我的页面看起来像这样:
if($_GET['something'] == 'somevalue')
{
$output .= 'somecode';
// make a DB query, fetch a row
//...
$row = $stmt->Fetch(PDO::ASSOC);
if($row != null)
{
$output .= 'morecode';
if(somethingIsOK())
{
$output .= 'yet more page output';
}
else
{
$error = 'something is most definitely not OK.';
}
}
else
{
$error = 'the row does not exist.';
}
}
else
{
$error = 'something is not a valid value';
}
if($error == '') // no error
{
//display $output on page
}
else // an error
{
// display whatever error occurred on the page
}
我做事的方式是可行的,但是对于可能显而易见的事情来说它非常麻烦和乏味:假设我在代码中间的某个地方调用了一个函数,或者想要检查变量的值,或者验证一个数据库查询返回了一个有效的结果,如果它失败了我想输出一个错误?我将不得不制作另一个 if/else 块并将所有代码移动到新的 if 块中。这似乎不是一种聪明的做事方式。
我一直在阅读有关 try/catch 的内容,并一直在考虑将我的所有代码放在 try 语句中,然后让代码在没有任何 if/else 块的情况下按顺序运行,如果出现问题,则抛出异常。根据我的阅读,这将停止执行并使其直接跳转到 catch 块(就像失败的 if 语句将转到 else 块一样),然后我可以在那里输出错误消息。但这是可接受的或标准的做法吗?
在构建和输出 HTML 页面的 php 应用程序中,处理错误(致命与否)的最佳方法是什么?我不想死在一个空白屏幕上,因为这对用户非常不友好,而是想在页面正文中输出一条消息,仍然允许页眉和页脚显示。
感谢您的建议!
【问题讨论】:
-
我自己使用
exit($error),例如:if($some_error == TRUE){exit('Error.');}希望这不是一个坏习惯。 -
@AzizAG - 不错的主意,但我的页面上有一个包含页眉和页脚的包装器,如果出现错误,我希望它以令人愉悦的图形方式显示。 (即,我不想死在带有错误消息的空白白页上)。
-
@Nate 我撒谎了,我从不直接使用
exit。我有一个名为exitApp($error)的函数:(1)显示标题(2)回显$error(3)显示页脚(4)最后exit应用程序。 -
@AzizAG 这就是未捕获异常的作用,因此您可能只是切换到异常。请参阅我的回答,它向您展示了如何启用 PDO 来引发异常以及如何将所有 PHP 错误转换为异常(PHP 有专门用于此目的的 ErrorException 类)。
标签: php exception exception-handling error-handling try-catch