PHP:die()必须死吗?

6

在生产环境中使用die()函数是否被认为是不良实践?我刚读到了这篇文章http://www.phpfreaks.com/blog/or-die-must-die,作者批评那些在生产环境中使用这种函数的人。所以我该如何编写代码:

$connection = mysql_connect($db_host, $db_username, $db_password);
if (!$connection){
    die ("Could not connect to the database.");
}

你如何编写代码?


2
向最终用户显示数据库错误是不好的做法 - 应该以某种方式记录这些错误,并向您的用户显示通用错误。 - Matt Ellen
2
顺便说一下,这是有史以来最好的主题标题! - Enrico Carlesso
1
请查看https://dev59.com/VUvSa4cB1Zd3GeqPfIma#2130127。 - LiraNuna
3个回答

3

你犯错并不会永远被淘汰,那么为什么你的应用程序就要如此呢?

正确的方法是拦截错误并根据特定情境进行处理,例如:

try {
    application goes here

    $conn = mysql_connect(...)
    if(!$conn)
        throw ....
    ....
} catch(Exception $err) {
     if(PRODUCTION) {
        log error
        say something nice
     }
     if(DEBUG) {
         var_dump($err);
     }
}

1
一个主观的问题。为什么你更喜欢引发和捕获异常,而不是在if(!$conn)条件中处理? - Enrico Carlesso
1
Enrico,因为异常更适合打破程序的标准流程并将控制传递给错误处理代码。这也是一种更健壮的“尽早崩溃”的方式:如果你依赖于到处都是if / else条件,你必须每次记得调用正确的函数来终止执行。 - Ben James

3

die()是一个非常粗糙的语句...在开发阶段很有用,但我发现在生产阶段是错误的。

你应该分析、监控和记录致命错误,并显示适当的消息,比如“无法连接到服务器,请在几分钟后重试或写信给admin@yourhost.com通知问题”!


1
在一个高效的环境中,你不应该向外界暴露任何关于系统的错误/信息。
重要的是,记录所有的错误。如果你在谈论一个网站,我会发送一个HTTP状态500作为响应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接