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エラーによって引き起こされます。さらに、例外を構成するタイプを分析することにより、発生したばかりの例外的な状況により多くの意味を与えることができます。