2017-10-20 2 views
0

1つのtryブロックに対して複数の例外タイプを処理するためのよりクリーンな方法がありますか?以下に示すように、異なるcatchステートメントに対して実行される特定のコードがあります。1つのtryブロックに対して複数の例外タイプを処理する

この関数は、繰り返しtry catchロジックを使用する多くの関数の1つです。何度もこの繰り返しの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 
     */ 


    } 

} 
+0

特定のものの代わりに 'Stripe \ Error \ Base'をキャッチします。 – ShiraNai7

答えて

-1

別に千ifelseからCatching multiple exception types in one catch block

を参照してください、1は、これらのエラーのすべてがそうStripe\Error\Baseは、より具体的なものをカバーしなければならないキャッチ、Stripe\Error\Baseを拡張

catch (Exception $e) { 
    switch ($e) { 
     case $e instanceof Exception1: 
      ...; 
      break; 
     case $e instanceof Exception2: 
      ...; 
      break; 
     default: 
      ...; 
    } 
} 
0

を行うことができます。

つまり、はさまざまなタイプに応じて異なる動作を実行する必要があるため、Stripeは異なる例外タイプを提供します。 RateLimit例外はキューに入れて後で再試行する必要があります。 Card例外は、修正するためにユーザーに返すべきものです。 Authenticationのエラーは、APIトークンがない/間違っていて、$$$を失っているため、アプリ全体がクレジットカードを取得できない可能性があります。

関連する問題