假设我有一些使用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类的名称,并手动进行编码;
(然后根据需要区分和分支如何处理特定对象)
我敢肯定,解决这个问题的方法很简单,但是我对此并不抱有怀疑(天哪; 我从那以后就找到了文献)。
答案 0 :(得分:2)
This website状态:
捕获异常的最简单方法是使用通用的try-catch块。因为异常是对象,所以它们都扩展了内置的Exception类(请参阅PHP中的Throwing Exceptions),这意味着捕获抛出的每个异常就像类型提示全局异常对象一样简单,这可以通过在前面添加反斜杠来表示。 :
try { // ... } catch ( \Exception $ex ) { // ... }