好吧,这对许多人来说是一个非常蹩脚的问题,但我希望我能得到压倒性的回应:)
当我在PHP中抛出异常时,我可以在消息中添加代码
我捕获异常并根据其类型处理它(如InvalidArgumentException
或OutOfBoundException
)。我记录消息或显示它或做任何合适的事情
我还可以添加一个先前的异常来追踪错误来源的路径。
但我从未使用或从未想过的一件事:代码有用吗?
例如:
throw new Exception("db Error", $code, $previousException);
我如何处理$code
?
答案 0 :(得分:37)
该消息用于向用户显示,而代码供程序使用。例如,在“数据库错误”示例中,您可能会构成一组代码,如
然后使用适当的代码。然后,当代码的其他部分看到它们异常时,它们会知道发生了什么,并且可能会智能地处理它。
答案 1 :(得分:13)
如何解释$code
取决于异常类型。例如,如果您有一个表示MySQL数据库错误的Exception
子类,则$code
可能是本机MySQL错误代码。在低级别IO错误的情况下,这可能是<errno.h>
的值。
基本上,$code
应包含以编程方式处理异常所需的任何内容。大多数例外都是在某处处理的。如果您的所有异常都只是显示为错误,那么$code
仅在您需要包含来自MySQL客户端库等库的错误代码时才有用。
答案 2 :(得分:3)
我见过实现(CakePHP),其中$code
被用作HTTP状态代码。
我用一部分例外实现了这个概念。因此,从HttpException
扩展的所有异常都会响应HTTP错误
答案 3 :(得分:3)
在面向对象语言中,异常的类型表示它是什么类型的错误。但是,如果您有两件事可以生成相同的异常类型,则可以使用错误代码提供更多详细信息。
错误代码是非面向对象语言中广泛使用的功能,用于表示它是什么类型的错误。
答案 4 :(得分:0)
我个人使用代码获取压缩的错误消息,该错误消息可以发送给支持人员。例如,假设用户尝试进行身份验证,但他失败了,我的代码将抛出AuthenticateException
并显示以下消息:Failed to authenticate
,并提供了一个特定代码来指示失败背后的实际问题。用户将仅看到身份验证消息和代码,因此不知道身份验证失败的真正原因是什么。然后建议他,如果需要,请与支持团队联系并提供代码。
基于异常代码,我们的支持同事可以轻松查明身份验证失败的真正原因(密码无效,用户名不存在,帐户被暂停等),并可以相应地为用户提供帮助。< / p>