Mar*_*tin 3 php exception class
假设我有一些使用try{...} catch() { ... }块的代码。在尝试过的代码中,有各种重要的第三方对象(或者可能是其他数据)。
通常这些第三方对象会抛出它们自己的第三方异常;在不知道这些异常的实际名称的情况下,我如何才能确定捕获这些异常?
对于代码各个部分中的各种第三方对象和方法,是否有一种相对快速的方法来捕获抛出的所有异常以进行进一步调查?
详细使用示例(Stripe有很多异常情况)
$someObject = new \someNamespace\someClass();
try {
$x = $someObject->someFunction($someData);
$y = $stripeObject->StripeProcessing($x);
}
catch(\Stripe\Error\Card $ex) {
// Since it's a decline, \Stripe\Error\Card will be caught
error_log("Stripe Card Error: ".$ex->message);
$message = "There was a card error: ".$err['message'];
}
catch (\Stripe\Error\RateLimit |
\Stripe\Error\InvalidRequest |
\Stripe\Error\Authentication |
\Stripe\Error\ApiConnection |
\Stripe\Error\Base $ex) {
$message = "There was a Stripe error: ".$ex->getMessage();
error_log("Stripe Other Error: ".print_r($ex,true));
}
catch( \someNamespace\GiggityException |
\someNamespace\GiggityNewMexicoException){
error_log("Family Guy! ".print_r($ex,true));
}
catch (Exception $ex){
error_log("Elvis has died! ".print_r($ex,true));
}
Run Code Online (Sandbox Code Playgroud)
可能会导致:
PHP 致命错误:未捕获 SomeDistributor\SomeClass\Exception:连接()失败。……等等……等等……
因此,上面有一堆来自两个命名空间的异常需要捕获,最后还有一般的异常Exception;虽然所有这些的代码反应都非常相似;我似乎仍然需要知道抛出的每个异常类的名称,并手动编码;
(在此之前,根据需要区分和分支如何处理特定的问题)
我确信这个问题的解决方案非常简单,但我找不到这方面的文献(哦;我已经找到了文献)。
该网站指出:
捕获异常的最简单方法是使用通用的 try-catch 块。因为异常是对象,所以它们都扩展了一个内置的 Exception 类(请参阅PHP 中的抛出异常),这意味着捕获每个抛出的异常就像对全局异常对象进行类型提示一样简单,这通过在前面添加反斜杠来表示:
Run Code Online (Sandbox Code Playgroud)try { // ... } catch ( \Exception $ex ) { // ... }