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


When should I throw an exception as opposed to return an error in PHP?

我正在开发一个API包装类,这是我制作的第一个包装类。在大多数情况下,这并不太困难。到了我需要处理 API 返回错误的可能性的地步,无论我对如何处理它们感到困惑。

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

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

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

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

这被认为是最好的做事方式吗?我是否应该在调用周围添加一个尝试捕获来拨打电话,而不是在file_get_contents一轮中添加一个尝试捕获?我是否应该为 XML 返回的每个错误抛出异常并使用错误类处理它们?

我正在寻找的答案还应该包含一个指向资源的链接,该链接解释了有关使用 API 包装器或类似内容进行错误处理的一些最佳实践。

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


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

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

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

因此,如果您从第三方获取 XML,您可能会期望它是有效的。但可能会有错误。如果 API 给你一个错误(找不到位置),它也可能是你的错误。只有在特殊情况下(您已经硬编码了一个您确定将永远存在的位置),这可能是一个例外。

最微不足道的例外是连接错误:那么肯定有问题。另一个简单的事情是 API 中的错误,例如"没有新信息"(仅举个例子):这是一个内部错误。在某个地方你必须画一条线,但在大多数情况下,什么是例外的,什么是可能发生的错误,这是很清楚的。