2016-10-18 1 views
1

私は現在、例外の一種類のみをスローするクラスを持っていますが、別の例外コードで:異なるタイプの例外、または異なるコードを持つ単一の例外タイプを使用する方が良いでしょうか?

class Foo 
{ 
    public static function method($var) 
    { 
     if ($condition1) { 
      throw new FooException('XXX', 'FORMAT'); 
     } 

     if ($condition2) { 
      throw new FooException('XXX', 'RANGE'); 
     } 
     return doSomething($number); 
    } 
} 

class FooException extends Exception 
{ 
    public function __construct($message, $code = 'UNDEFINED_ERROR', Exception $previous = null) 
    { 
     $this->message = $message; 
     $this->code  = $code; 
     $this->previous = $previous; 
    } 
} 

この最初のimplentationと異なる例外がスローされている別の1の間の重要な違いはありますか?追加の値を持つ

唯一の例外タイプを使用して
class Bar 
{ 
    public static function method($var) 
    { 
     if ($condition1) { 
      throw new BarFormatException('XXX'); 
     } 

     if ($condition2) { 
      throw new BarRangeException('XXX'); 
     } 
     return doSomething($number); 
    } 
} 

class BarFormatException extends Exception 
{} 

class BarRangeException extends Exception 
{} 
+1

違うエラー処理コードでキャッチして適切に修正できるため、さまざまな例外がより優れています。 –

+0

唯一の例外タイプをキャッチして、コードに応じていくつかの異なるタスクを実行するのとどのように違いますか? –

+0

エラー処理コード内のデータを二重チェックし、すべての可能性をテストし、現在の例外を再処理して処理しないケースを処理する必要があります。さまざまな例外タイプを使用すると、PHPが自動的に自動的に行うすべてのものは、より短く、よりクリーンで高速なコードになります。 –

答えて

1

は、あなたはすべての単一の例外を自分で入力し処理する必要が意味し、単一のcatchブロックでエラーのすべての種類をdifferenciating、あなたはあなたができるように処理しない場合のために見それらをやり直す。

これらのすべては、異なる例外タイプを使用すると自動的に自動化されます。よりクリーンで高速なエンドでエラーが発生しにくいため、誤ってエラー処理にエラーが発生する心配はありません。

さらに、カスタム例外の種類は、内容に応じて異なる内部データを持つことができます。

+0

正確な説明をいただきありがとうございます! –