我们需要PHP异常代码用于什么?有使用案例吗?

问题描述 投票:41回答:5

好,对许多人来说这是一个非常la脚的问题,但我希望我会得到压倒性的答复:)

当我在PHP中引发异常时,可以在消息中添加代码。我捕获了一个异常并根据其类型(例如InvalidArgumentExceptionOutOfBoundException)对其进行处理。我登录message或显示它或执行任何适当的操作。我还可以添加一个先前的异常,以跟踪到错误源的路径。

但是我从未使用过或从未想到的一件事:代码有多有用?

例如:

throw new Exception("db Error", $code, $previousException);

我如何使用$code

php exception exception-handling
5个回答
40
投票

消息是要显示给用户的,而代码是供程序使用的。因此,例如,在您的“数据库错误”示例中,您可能会组成一组代码,例如

  1. 无法连接
  2. 查询时出错
  3. 空结果
  4. 错误关闭连接

,然后使用适当的代码。然后,当代码的其他部分看到它们异常时,他们将知道发生了什么,并且可能会智能地对其进行处理。


13
投票

$code的解释方式取决于异常类型。例如,如果您有一个表示MySQL数据库错误的Exception子类,则$code可能是本机MySQL错误代码。如果发生低级IO错误,则可能是<errno.h>中的值。

基本上,<errno.h>应该包含以编程方式处理异常所需的任何内容。大多数异常应在某个地方处理。如果所有异常都简单地显示为错误,则$code仅在需要包含来自MySQL客户端库之类的库中的错误代码时才有用。


3
投票

我已经看到将$code用作HTTP状态代码的实现(CakePHP)。

我已经用一个例外子集实现了这个概念。因此,从$code扩展的所有异常都将引发HTTP错误


3
投票

在面向对象的语言中,异常的类型传达了错误的类型。但是,例如,如果您有两件事可以生成相同的异常类型,则可以使用错误代码来提供更多详细信息。

错误代码是非面向对象语言中一种广泛使用的功能,用于传达错误的类型。


0
投票

我个人使用代码来获取压缩的错误消息,该错误消息可以发送给支持人员。例如,假设用户尝试进行身份验证,但他失败了,我的代码将抛出HttpException并显示消息:AuthenticateException,并且一个特定的代码引用了失败背后的实际问题。用户将仅看到身份验证消息和代码,因此不知道身份验证失败的真正原因是什么。然后建议他,如果需要,请与支持团队联系并提供代码。

基于异常代码,我们的支持同事可以轻松查明身份验证失败的真正原因(密码无效,用户名不存在,帐户被暂停等,并可以相应地为用户提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.