我们需要 PHP 异常代码做啥?任何用例场景?
Posted
技术标签:
【中文标题】我们需要 PHP 异常代码做啥?任何用例场景?【英文标题】:What do we need the PHP-exception code for? Any use case scenario?我们需要 PHP 异常代码做什么?任何用例场景? 【发布时间】:2011-08-17 15:29:06 【问题描述】:好的,对很多人来说这是一个非常蹩脚的问题,但我希望我会得到热烈的回应:)
当我在 php 中抛出异常时,我可以在消息中添加代码。
我捕获一个异常并根据其类型(如InvalidArgumentException
或OutOfBoundException
)处理它。我记录消息或显示它或做任何合适的事情。
我还可以添加前面的异常来跟踪错误来源的路径。
但有一件事我从未使用过或从未想过:代码有多大用处?
例如:
throw new Exception("db Error", $code, $previousException);
$code
可以做什么?
【问题讨论】:
(无关:我很确定“用例场景”是双重的......) 只是要指出,你搞错了。应该是:throw new Exception( "db Error", $code, $previousException );
【参考方案1】:
我个人使用代码来获取压缩的错误消息,用户可以将其发送给支持人员。例如,假设用户尝试进行身份验证,但他失败了,我的代码会抛出一个 AuthenticateException
并显示消息:Failed to authenticate
,以及一个特定代码指的是失败背后的真正问题。用户只会看到身份验证消息和代码,因此不知道身份验证失败的真正原因是什么。然后建议他,如果需要,请联系支持团队并提供代码。
根据异常代码,我们的支持同事可以轻松查明身份验证失败的真正原因(密码无效、用户名不存在、帐户被暂停等),并可以相应地帮助用户。
【讨论】:
【参考方案2】:在面向对象的语言中,异常的类型表示它是什么类型的错误。但是,例如,如果您有两个可以生成相同异常类型的事物,则可以使用错误代码提供更多详细信息。
错误代码是非面向对象语言中广泛使用的功能,用于传达它是什么类型的错误。
【讨论】:
【参考方案3】:我已经看到了将$code
用作 HTTP 状态代码的实现 (CakePHP)。
我已经用一个例外子集实现了这个概念。因此,所有从HttpException
扩展的异常都会以 HTTP 错误响应
【讨论】:
【参考方案4】:$code
的解释方式取决于异常类型。例如,如果您有一个代表 mysql 数据库错误的 Exception
子类,那么 $code
可能是本机 MySQL 错误代码。在低级 IO 错误的情况下,这可能是来自 <errno.h>
的值。
基本上,$code
应该包含您以编程方式处理异常所需的任何内容。大多数异常都应该在某个地方处理。如果您的所有异常都简单地显示为错误,那么$code
仅在您需要包含来自诸如 MySQL 客户端库之类的库的错误代码时才有用。
【讨论】:
【参考方案5】:消息用于显示给用户,而代码供您的程序使用。因此,例如,在您的“数据库错误”示例中,您可能会编造一组代码,例如
-
无法连接
查询时出错
空结果
关闭连接时出错
然后使用适当的代码。然后当你的代码的其他部分看到它们异常时,它们就会知道发生了什么并可能智能地处理它。
【讨论】:
首选什么?使用异常代码或多个异常类(\Exception\MySQL\ConnectionFailed
、\Exception\MySQL\EmptyResultSet
等)?谢谢! :)
@Phillipe:这确实是个人选择的问题,但通常情况下,如果案例数量较少,则使用不同的类,如果案例数量很大,则使用代码。在这个有四种情况的数据库示例中,不同的类就可以了。但是,如果您想到其他五个可能出错的地方,那么使用九个不同的异常类会很痛苦,而单独使用代码会更有意义。
谢谢,有道理! :-)
你真的会向用户显示消息吗?如果需要,本地化怎么办?将本地化消息放入异常中是否可以接受?
您当然可以将本地化消息放入异常中,但在这种情况下,代码往往更有意义,因为代码可以用作 i18n 键。以上是关于我们需要 PHP 异常代码做啥?任何用例场景?的主要内容,如果未能解决你的问题,请参考以下文章