php页面显示程序错误,最好的方法来处理PHP页面上的错误?

有很多方法,你可以处理这一点,坦率地说,没有一个是内在的“正确”。

你必须自己决定,哪种方法对你更加“舒适” – 它总是一个偏好的主人(虽然有一些技术,你应该避免和好的原因)。

它将高度依赖于如何拆分逻辑,但我倾向于包含所有可以在函数中返回非致命错误的代码,并使用所述函数的返回值来指示存在错误。

对于fatal errors我倾向于使用异常(用try-catch块)。

现在只是为了清楚:

>非致命错误是一种可以从中恢复的错误 – 意味着即使出现错误,仍然有一些代码可以执行并生成一些有价值的输出。例如,如果您想使用NTP协议获取当前时间,但服务器没有响应,您可以决定使用本地时间功能,并仍然向用户显示一些有价值的数据。

>一个致命错误是一个错误,你将无法恢复 – 意味着一个真正的错误发生,你能做的唯一的事情是告诉你的用户,页面不能做什么被要求。例如,如果您从数据库获取一些数据并获得SQL异常 – 没有有价值的数据显示,您只能通知用户这一点。

非致命错误(使用函数返回)

使用函数返回作为处理非致命问题的一个很好的例子是一个函数,它试图在页面上显示某些文件的内容,但这不是页面的主要目的(例如,一个功能,显示徽章,从一个文本文件,在每一个单独的页面 – 我知道这是很牵强,但与我抱着)。

function getBadge($file){

$f = fopen($file,'r');

if(!$f){

return null;

}

.. do some processing ..

return $badges;

}

$badges = getBadges('badges.txt');

if(!$badges){

echo "Cannot display badges.";

} else {

echo $badges;

}

.. carry on doing whatever page should be doing ..

事实上,函数fopen本身就是一个这样的例子 – it will return。

Returns a file pointer resource on success, or FALSE on error.

致命错误(使用异常 – try-catch)

当你有一些代码需要执行,因为它是用户想要的(例如从数据库中读取所有新闻并显示给用户),你可以使用异常。让我们举一个简单的例子 – 一个用户访问他的个人资料,并希望看到他的所有消息(让我们假设,现在,他们以纯文本存储)。您可能有以下功能:

function getMessages($user){

$messages = array();

$f = fopen("messages_$user.txt","r");

if(!$f){

throw new Exception("Could not read messages!");

}

... do some processing ...

return $messages;

}

并使用它像这样:

try{

..do some stuff..

$messages = getMessages($_SESSION['user'])); //assuming you store username in $_SESSION

foreach($messages as $msg){

echo $msg."
";

}

} catch(Exception $e){

echo "Sorry, there was an error: ".$e->getMessage();

}

现在这可能派上用场,如果你有一个“顶级”脚本,将执行所有其他代码。这意味着,例如,在您的index.php中,您将只有:

try{

.. execute some code, perform some functions ..

} catch(Exception $e){

echo "Sorry, there was an error: ".$e->getMessage();

}

不要过度使用异常!

无论你做什么,永远不要使用异常作为一种方法来检查你可以恢复的东西。有一个阅读on another question(完全信用转给安东Gogolev的一个很好的解释,以及其他答案)为什么是这种情况。

进一步阅读

现在没有更好的方法来学习如何处理错误,而不是尝试几件事情,看看什么是对你有好处。您可能会发现以下有用:

希望这可以帮助 :)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值