2016-08-23 5 views
2

特定の例外をキャッチして正しく処理したい。しかし、私は前にこれをやっていないし、私はそれを最善の方法でしたい。PHPのハンドル固有の例外

class HandleException extends Exception 
{ 
    //my code to handle exceptions; 
} 

のような別のクラスのものを作成し、その中に別の例外ケースを扱うさまざまな方法を持っているために、正しいでしょうか?私の知る限り、ExceptionクラスはPHPの "統合された"クラスのようなものなので、拡張することができます。また例外がキャッチされた場合、プログラムのフローを終了する必要はありませんか?

そして、このクラスのインスタンスは、例外がキャッチされたときに作成されますか? Sth。

 catch (\Exception $e) { 
     $error = new HandleException; 
    } 
+1

いいえ、これは正しくありません。 https://secure.php.net/manual/en/language.exceptions.phpを読んでから(組み込み例外がどのように機能するかを完全に理解すれば)https://secure.php.net/manual/en/language .exceptions.extending.php – Chris

+1

特定の種類の例外を処理するには、独自の例外を適用する必要があります(そうです)が、ビジネスロジックでは、作成した例外をスローしてキャッチする必要がありますロジック)。ここでこの例を確認してください:https://eval.in/627662 –

答えて

2

CAN独自のExceptionオブジェクトを拡張して独自の例外タイプを提供します。

class FooExcept extends Exception { .... } 
class BarExcept extends Exception { .... } 

try { 
    if ($something) { 
     throw new FooExcept('Foo happened'); 
    } else if ($somethingelse) { 
     throw new BarExcept('Bar happened'); 
    } 
} catch (FooExcept $e) { 
    .. foo happened, fix it... 
} catch (BarExcept $e) { 
    ... bar happened, fix it ... 
} 

例外がキャッチされた場合、プログラムは必ずしも中止する必要はありません。それは例外ハンドラそのものになります。しかし、例外が常にコールスタックの先頭に戻り、捕捉されない場合、スクリプト全体が処理されない例外エラーで中止されます。

2

のように手動

から複数のcatchブロックは 例外の異なるクラスをキャッチするために使用することができます。通常の実行( tryブロック内に例外がスローされない場合)は、 シーケンスで定義された最後のcatchブロックの後に続きます。キャッチ ブロック内に例外をスローする(または再スローする)ことができます。

だから、このような何かを行うことができます。

try { 
    // some code 
} catch (HandleException $e) { 
    // handle sthis error 
} catch (\Exception $e) { 
    // handle that error 
} 

これは別の例外を処理します。新しいバージョンのPHPでfinallyキーワードを使用することもできます。

関連する問題