(PHP) try-catch文とは

php-try-catch

 

phpだけではなく他の言語でもよく使われるtry-catch文。
使い方のメモ

 

try-catch文の役割

try-catch文の役割は、ロジックで生まれた例外を捕まえること。

通常、プログラマがプログラムを書く時は、存在しうる値やデータ、処理の流れを想定し、その通りにプログラムを書いていく。

が実際プログラムを書いていくと、上記の想定に漏れた値やデータ、処理の流れが存在し、それが原因でプログラム全体がうまく動かないと言うことがある。

このような想定外の事象のことを「例外」と言い、この「例外」をつまみ上げて処理してくれるのが、try-catch文

 

例外とは

例えば引数のaとb(数値)の合計を返すメソッドがあるとして、
‘aaa’などの文字列が引数として渡ってきてしまう場合、想定外の値なので、
このような場合に例外として処理をする

 

try-catch文の使い方

 

では、try-catch文の役割が分かったところで、実際try-catch文の使い方を確認していく。

 

try-catch文の構造

tyr-catch文の構造は下記のようになっている。

try {

    // ロジック(処理)を記載

    //例外が発生したら例外を投げる
    throw new Exception();

} catch(Exception ex) {
    // 例外が渡ってくるところ
}

詳しく解説していく。

try文

try {} で囲んだ部分(tryブロック)に、例外が発生しうるロジック(例外)を書いておく。
例外が発生した場合に、throw文を記述することで、起こった例外の情報とともに、catch {} で囲んだ部分(catchブロック)へと処理を進めることができる。

 

throw文とは

任意のタイミングで例外を発生させることができる文。
この文を書くことで、catch文へと処理を促すことができる。

throw new Exception();

 

以下例

//例外を発生させ、catch文へ
function addNum($a,$b){

    if( is_numeric($a) == false){
        throw new Exception(‘引数1が数字ではありません’);
    }
    if( is_numeric($b) == false){
        throw new Exception(‘引数2が数字ではありません’);
    }

return $a/$b;
}

数字が渡ってくる想定の引数に対し、is_numeric関数でバリデーションを施し、
数字でなかった場合に、throw文を発生させ、例外としている。

次の項目で紹介する、catch文へと処理が進む

catch文

catch文内では、例外が発生した場合の処理を記述する。
引数のExceptionクラスのオブジェクトに例外情報が格納されており、そこから発生した例外情報などを取得するなどして、例外の際の処理を記述する。

} catch(Exception ex) {

    //例外の場合の処理
    echo '捕捉した例外: ' . $e->getMessage();//「引数1(または2)が数字ではありません」のメッセージ取得
}

 

例外処理(catch文)でよくやること

 

tryブロックで例外があった場合に、catchブロックに移り例外処理をするという流れが分かったところで、具体的にcatchブロック内でよくやること、処理の例などを紹介する。

 

①例外メッセージの取得

例外メッセージを取得する。
画面やログに例外メッセージを吐き出すことで、例外が発生していることをユーザや開発者に伝えたりする。

//例外のメッセージを取得できるgetMessageメソッド(ログに吐き出したりする)
try {

    throw new Exception(‘エラーです’);

} catch(Exception ex) {
    //画面に出す例
    var_dump(ex->getMessage());  //「エラーです」と画面に表示される
}

 

②処理を止める

catch文に処理が進んできたからと言って、catch文以降の処理が行われない訳ではない。例外がなんであろうとプログラムはそのまま動いてしまう(これは割と重要)。

それではまずいので、例外に入った段階で、処理を止めたりする

} catch(Exception ex) {

    // 処理を止める
    return false;
}

//これ以降の処理は行われない

 

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。