我们需要PHP异常代码做什么?任何用例场景?

我们需要PHP异常代码做什么?任何用例场景?,php,exception,exception-handling,Php,Exception,Exception Handling,好吧,对很多人来说这是一个很蹩脚的问题,但我希望我能得到压倒性的回答:) 当我在PHP中抛出异常时,我可以向消息中添加代码。 我捕获一个异常并根据其类型进行处理(如InvalidArgumentException或OutOfBoundException)。我记录消息或显示它,或做任何合适的事情。 我还可以添加一个前一个异常以跟踪到错误来源的路径。 但有一件事我从未使用过,也从未想过:代码有多有用 例如: throw new Exception("db Error", $code, $previo

好吧,对很多人来说这是一个很蹩脚的问题,但我希望我能得到压倒性的回答:)

当我在PHP中抛出异常时,我可以向消息中添加代码。
我捕获一个异常并根据其类型进行处理(如
InvalidArgumentException
OutOfBoundException
)。我记录消息或显示它,或做任何合适的事情。
我还可以添加一个前一个异常以跟踪到错误来源的路径。

但有一件事我从未使用过,也从未想过:代码有多有用

例如:

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

如何处理
$code

此消息用于向用户显示,而代码用于您的程序。例如,在“数据库错误”示例中,您可能会编写一组代码,如

  • 无法连接
  • 查询时出错
  • 空结果
  • 关闭连接时出错

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

    如何解释
    $code
    取决于异常类型。例如,如果您有一个表示MySQL数据库错误的
    异常
    子类,那么
    $code
    可能是本机MySQL错误代码。在低级别IO错误的情况下,这可能是来自的值

    基本上,
    $code
    应该包含以编程方式处理异常所需的任何内容。大多数异常都是要在某个地方处理的。如果您的所有异常都只是显示为错误,那么
    $code
    只有在您需要包含来自MySQL客户端库之类的库的错误代码时才有用。

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


    我用一部分例外实现了这个概念。因此,在面向对象语言中,从
    HttpException
    扩展而来的所有异常都会以HTTP错误响应,异常的类型表示它是什么类型的错误。但是,例如,如果有两个东西可以生成相同的异常类型,则可以使用错误代码提供更多详细信息


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

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


    根据异常代码,我们的支持同事可以很容易地确定身份验证失败的真正原因(密码无效、用户名不存在、帐户被挂起等),并相应地帮助用户。

    (无关:我很确定“用例场景”是双重的…),你搞错了。它应该是:
    抛出新异常(“db Error”,$code,$previousException)首选什么?使用异常代码或多个异常类(
    \exception\MySQL\ConnectionFailed
    \exception\MySQL\EmptyResultSet
    等)?Thx!:)@Phillipe:这是个人的选择,真的,但是一般来说,如果案例数量少,就使用不同的类,如果案例数量很大,就使用代码。在这个有四种情况的数据库示例中,可以使用不同的类。但是,如果您想到了其他五件可能出错的事情,那么使用九个不同的异常类将非常痛苦,单独使用代码将更有意义。谢谢,这很有意义!:-)你真的会向用户显示消息吗?如果需要,本地化是什么?将本地化消息放入异常是否可以接受?您当然可以将本地化消息放入异常,但在这种情况下,代码更有意义,因为代码可以用作i18n密钥。