我正在研究一些API的PHP接口,它可以返回许多(最多100个)不同的错误代码.当遇到这样的代码时,我的接口应该抛出异常.我的PHP有点生疏,因此我不确定什么是最适合当今php程序员的选项:
MyApiThisAndThatError每个错误代码都有一个单独的类?MyApiError并提供API错误代码作为参数?我也愿意接受其他建议.
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设上面的代码,如果要执行MyCompany\Component\Component :: doSomething(),那么从doSomething()方法发出的异常可以被以下任何类型捕获:PHP的异常,SPL的RuntimeException组件的MyCompany\Component\MyApiException,或组件的MyCompany\Component\Exception.这为调用者提供了许多机会来捕获从库中给定组件发出的异常,这是由返回的API错误引发的.此外,通过分析构成异常的类型,可以为刚刚发生的异常情况赋予更多的语义含义.