什么时候应该抛出异常而不是在PHP中返回错误?

Rel*_*ual 8 php api error-handling exception-handling

我正在开发一个API包装器类,这是我做的第一个.在大多数情况下,它并不太难.达到我需要处理API返回的错误可能性的程度,但是我应该如何处理它们.

外部文件将调用API类,即,findVenueByLocationID($locationID); 此函数将构造API调用的URL和方法(POST,GET,DELETE等)并将其传递给名为makeCall的函数.

MakeCall构造完成的URL,将请求发送到服务并传回生成的XML.如果API返回错误,则它在返回的XML中.使用函数file_get_contents()调用URL.API具有一定数量的错误代码,它将在XML中返回.

据我了解,我应该在函数makeCall中执行以下操作:

  • 在返回XML之前,检查它是否包含错误代码,如果是,则将其传递给错误处理类以处理错误.(记录并返回客户端版本错误消息)
  • 在file_get_contents()函数周围添加一个try catch来捕获任何连接错误,即无法访问服务器?

这被认为是最好的做事方式吗?我应该在调用makeCall时添加try catch而不是在file_get_contents内部吗?我应该为XML返回的每个错误抛出异常并使用错误类处理它们吗?

我正在寻找的那种答案还应该包含一个资源的链接,该链接解释了一些围绕使用API​​包装器或类似事件进行错误处理的最佳实践.

提前感谢您的时间和回复.


编辑:与我们的CTO谈话后,当前版本的PHP错误是异常,我应该抛出异常并将异常处理留给调用者.请记住,我正在为API实现一个包装类.思考?

Nan*_*nne 6

您首先应该知道异常和错误之间的区别:错误发生,异常是例外。

例如,输入错误密码(无法登录)的用户会收到错误。当检查密码时数据库不可用时,您将收到异常(并且希望能够妥善处理该异常)。

因此,如果您从第三方获得 XML,您可能会认为它是有效的。但可能会出现错误。如果 API 给您一个错误(未找到位置),那么您也可能会遇到错误。只有在特殊情况下(您已经硬编码了一个您确信永远存在的位置),这可能是一个例外。

最微不足道的异常是连接错误:那么肯定有问题。另一个简单的事情是您可以预料到的 API 中的错误,例如“没有新信息”(仅作为示例):这是一个内部错误。在某些地方你必须划清界限,但在大多数情况下,很清楚什么是例外,什么是可能发生的错误。