PHP如何确保捕获所有异常

时间:2019-07-05 13:36:35

标签: php class exception

假设我有一些使用try{...} catch() { ... }块的代码。在已尝试的代码中,存在各种不平凡的第三方对象(或其他数据)。

这些第三方对象通常会抛出自己的第三方异常;在不知道这些异常的实际名称的情况下,如何确定捕获这些异常?

在代码的各个部分中使用各种第三方对象和方法,是否有相对快速的方法来捕获抛出的所有 异常以进行进一步研究?

详细用法示例(条带有许多例外情况)

$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));
}

可能导致:

  

PHP致命错误:未捕获SomeDistributor \ SomeClass \ Exception:connection()失败。 ...等...等...

因此,上面有两个来自两个命名空间的异常,以及最后的常规Exception;尽管所有这些代码的反应非常相似;我似乎仍然需要知道抛出的每个Exception类的名称,并手动进行编码;

那么,有一种方法可以在一处捕获所有可能的异常吗?

(然后根据需要区分和分支如何处理特定对象)

我敢肯定,解决这个问题的方法很简单,但是我对此并不抱有怀疑(天哪; 我从那以后就找到了文献)。

1 个答案:

答案 0 :(得分:2)

This website状态:

  

捕获异常的最简单方法是使用通用的try-catch块。因为异常是对象,所以它们都扩展了内置的Exception类(请参阅PHP中的Throwing Exceptions),这意味着捕获抛出的每个异常就像类型提示全局异常对象一样简单,这可以通过在前面添加反斜杠来表示。 :

try {
  // ...
} catch ( \Exception $ex ) {
  // ...
}