处理一个Try块的多个异常类型

时间:2017-10-20 16:51:30

标签: php exception-handling

是否有更简洁的方法来处理单个try块的多个异常类型?正如您将在下面看到的,我们有针对不同catch语句执行的特定代码。

这个函数是许多使用重复try catch逻辑的函数之一。有可能以某种方式消除这个重复的捕获代码吗?

public function add_payment_method(Request $request){

    try{

        // Try to do some stuff

    } catch (\Stripe\Error\RateLimit $e) {

        /*
            CODE FOR THIS SPECIFIC EXCEPTION
        */

    } catch (\Stripe\Error\InvalidRequest $e) {


         /*
            CODE FOR THIS SPECIFIC EXCEPTION
        */


    } catch (\Stripe\Error\Authentication $e) {


         /*
            CODE FOR THIS SPECIFIC EXCEPTION
        */


    } catch (\Stripe\Error\Base $e) {


         /*
            CODE FOR THIS SPECIFIC EXCEPTION
        */


    } catch (\Stripe\Error\ApiConnection $e) {


         /*
            CODE FOR THIS SPECIFIC EXCEPTION
        */


    } catch (\Exception $e) {


         /*
            CODE FOR GENERIC EXCEPTION
        */


    }

}

2 个答案:

答案 0 :(得分:0)

所有这些错误都会延伸Stripe\Error\Base,因此捕获Stripe\Error\Base应涵盖更具体的错误。

也就是说,Stripe提供了不同的异常类型,因为 应该针对不同的类型执行不同的操作。 RateLimit异常是您应该排队并稍后重试的内容。 Card例外是您应该回复给用户修复的内容。 Authentication错误可能意味着您的整个应用都无法使用信用卡,因为您的API令牌丢失/错误且您正在失去$$$。

答案 1 :(得分:-1)

请参阅source code

除了一千个ifelse之外,还可以做到

h2o.assign()