我正在研究某个API的PHP接口,它可以返回许多(最多100个)不同的错误代码。当遇到这样的代码时,我的接口应该抛出异常。我的PHP有点生疏,因此我不确定什么是现在的php程序员最合适的选择:
MyApiThisAndThatError
类?MyApiError
并提供API错误代码作为参数?我也愿意接受其他建议。
答案 0 :(得分:7)
TLDR: 使用包含API错误代码的通用MyApiException类。
Ralph Schindler在http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3
上写了一篇关于一般主题的好文章如果您阅读了整篇文章,您会看到一个图书馆代码中的最佳实践部分,该部分演示了(我已针对此背景修改了他的示例):
// usage of bracket syntax for brevity
namespace MyCompany\Component {
interface Exception
{}
class MyApiException
extends \RuntimeException
implements Exception
{}
class Component
{
public static function doSomething()
{
$myApiCall->doSomthing();
if ($myApiCall->hasError) {
throw new MyApiException($myApiCall->getMessage(), $myApiCall->getErrorCode);
}
}
}
}
假设上面的代码,如果要执行MyCompany \ Component \ Component :: doSomething(),则可以通过以下任何类型捕获从doSomething()方法发出的异常:PHP的异常,SPL的RuntimeException组件的MyCompany \ Component \ MyApiException,或组件的MyCompany \ Component \ Exception。这为调用者提供了许多机会来捕获从库中给定组件发出的异常,这是由返回的API错误引发的。此外,通过分析构成异常的类型,可以为刚刚发生的异常情况赋予更多的语义含义。
答案 1 :(得分:3)
我有类似的问题。当我这样做时,我把所有错误分成了几个族(即查询,模型,控制器,表格等等),然后在每个错误族中,我为每个错误代码定义了常量。
理想情况下,我想要一个统一的异常类,但是在某些地方,我会在try catch块中有一组函数调用,并且最好将它们分成不同的族,这样我就能做到每个错误家族的一个问题,它将适当地确定下一步该做什么。是的,我可以有一个统一的错误捕获器和一个从错误号确定系列的功能,但它似乎不那么优雅。
答案 2 :(得分:3)
这取决于几个因素。在我看来,这些是特定例外的原因: