{php 5 例外 (例外)}

WBOY
リリース: 2016-06-23 14:30:06
オリジナル
849 人が閲覧しました

例外: 例外処理は、指定されたエラー (例外) 状況が発生したときにスクリプトの通常のフローを変更するために使用されます。

例外がトリガーされると、通常は次のことが起こります。

現在のコードの状態が保存され、コードの実行が事前定義された例外ハンドラー関数に切り替わります。状況に応じて、プロセッサは保存されたコードの状態からコードの実行を再開することがあります。スクリプトの実行を終了するか、コード内の別の場所からスクリプトの実行を続行します。

さまざまなエラー処理方法を示します。

例外の基本的な使用 カスタム例外ハンドラーの作成 複数の例外 例外の再スロー 最上位の例外ハンドラーのセットアップ

              <p class="sycode">              基本使用 :              </p>              <p class="sycode">              Try,     throw     和     catch    要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。处理处理程序应当包括:Try     -     使用异常的函数应该位于     "    try    "     代码块内。如果没有触发异常,则代码将照常继续执行。但异常被触发,会抛出一个异常    。              </p>              <p class="sycode">              Throw     -     这里规定如何触发异常。每一个     "    throw    "     必须对应至少一个     "    catch    "    Catch     -         "    catch    "     代码块会捕获异常,并创建一个包含异常信息的对象    <?    phpfunction inverse($x) {     if     (    !    $x) {     throw         new     Exception(    '    Division by zero.    '    ); }     else         return         1    /    $x;}    try     { echo inverse(    5    ) .     "    \n    "    ; echo inverse(    0    ) .     "    \n    "    ;}     catch     (Exception $e) { echo     '    Caught exception:     '    , $e    ->    getMessage(),     "    \n    "    ;}    //     Continue execution        echo     '    Hello World    '    ;    ?>              </p>
ログイン後にコピー


~カスタム例外クラスを作成する

カスタム例外ハンドラーの作成は非常に簡単です。 PHP で例外が発生したときに関数が呼び出される特殊なクラスを作成しただけです。このクラスは例外クラスの拡張である必要があります。

このカスタム例外クラスは、PHP の例外クラスのすべてのプロパティを継承し、カスタム関数を追加できます。

例外クラスの作成を開始します:

              <p class="sycode">              <?    php    class     customException extends Exception {     public     function errorMessage() {     //    error message         $errorMsg     =         '    Error on line     '    .$    this    ->    getLine().    '     in     '    .$    this    ->    getFile() .    '    : <b>    '    .$    this    ->    getMessage().    '    </b> is not a valid E-Mail address    '    ;     return     $errorMsg; } }$email     =         "    someone@example...com    "    ;    try     {     //    check if              if    (filter_var($email, FILTER_VALIDATE_EMAIL)     ===     FALSE) {     //    throw exception if email is not valid             throw         new     customException($email); } }    catch     (customException $e) {     //    display custom message         echo $e    ->    errorMessage(); }    ?>              </p>
ログイン後にコピー

~複数の例外

スクリプトに複数の例外を使用して、複数の状況を検出できます。

複数の if..else コード ブロック、switch コード ブロックを使用したり、複数の例外をネストしたりできます。これらの例外では、異なる例外クラスが使用され、異なるエラー メッセージが返されることがあります。

              <p class="sycode">              <?    php    class     customException extends Exception{    public     function errorMessage(){    //    error message        $errorMsg     =         '    Error on line     '    .$    this    ->    getLine().    '     in     '    .$    this    ->    getFile().    '    : <b>    '    .$    this    ->    getMessage().    '    </b> is not a valid E-Mail address    '    ;    return     $errorMsg;}}$email     =         "    someone@example.com    "    ;    try     {     //    check if              if    (filter_var($email, FILTER_VALIDATE_EMAIL)     ===     FALSE) {     //    throw exception if email is not valid             throw         new     customException($email); }     //    check for "example" in mail address             if    (strpos($email,     "    example    "    )     !==     FALSE) {     throw         new     Exception(    "    $email is an example e-mail    "    ); } }    catch     (customException $e) { echo $e    ->    errorMessage(); }    catch    (Exception $e) { echo $e    ->    getMessage(); }    ?>              </p>
ログイン後にコピー


~例外を再スローする

場合によっては、例外がスローされたときに、標準的な処理とは異なる方法で処理したい場合があります。例外は「catch」ブロックで再度スローできます。

スクリプトはシステムエラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーにとって簡単にするために、よりユーザーフレンドリーなメッセージを使用して例外を再度スローできます:

              <p class="sycode">              <?    php    class     customException extends Exception {     public     function errorMessage() {     //    error message         $errorMsg     =     $    this    ->    getMessage().    '     is not a valid E-Mail address.    '    ;     return     $errorMsg; } }$email     =         "    someone@example.com    "    ;    try     {     try     {     //    check for "example" in mail address             if    (strpos($email,     "    example    "    )     !==     FALSE) {     //    throw exception if email is not valid             throw         new     Exception($email); } }     catch(Exception $e) { //re-throw exception throw new     customException($email); } }    catch     (customException $e) {     //    display custom message         echo $e    ->    errorMessage(); }    ?>              </p>
ログイン後にコピー


~トップレベル例外ハンドラーを設定します (トップレベル例外ハンドラー)

set_Exception_handler() 関数を設定できますキャッチされなかった例外をすべて処理するユーザー定義関数。

<?phpfunction myException($exception){echo "<b>Exception:</b> " , $exception->getMessage();}set_exception_handler('myException');throw new Exception('Uncaught Exception occurred');?>
ログイン後にコピー

上記のコードの出力は次のようになります:

Exception: Uncaught Exception occurred
ログイン後にコピー

上記のコードには、「catch」ブロックはありませんが、トップレベルの例外ハンドラーがトリガーされます。この関数は、キャッチされなかった例外をすべてキャッチするために使用する必要があります。

例外のルール 例外処理を必要とするコードは、潜在的な例外をキャッチするために try ブロック内に配置する必要があります。 すべての try ブロックまたは throw ブロックには、対応する catch ブロックが少なくとも 1 つ必要です。 複数の catch ブロックを使用して、さまざまな種類の例外をキャッチします。 例外は、try ブロック内の catch ブロックで再スローできます。

つまり、例外がスローされた場合は、それをキャッチする必要があります。

~

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート