エラー発生時のための例外処理

例外

プログラムが動いている最中に、予期せぬエラーが発生した場合は何の準備もないとプログラムが止まってしまいます。
そこで、エラーが起こりそうな処理を行う時に例外処理を行うことで、エラーが発生した場合でもプログラムを止めないようにすることができます。
PHPにはエラーが発生するお、エラー内容を格納したオブジェクトを生成するクラスが用意されています。そのクラスを例外クラスといい、例外クラスのインスタンスを生成し、エラー内容を調べ、その後どのような処理をするかコードを書いておけばプログラムを止めずに次の処理へ移行できます。

try…catchで例外処理

構文が以下のようになります。

try{
     //エラーが発生するかもしれない処理
} catch (例外クラス名 例外内容を入れる変数) {
    //エラーが発生したら実行する処理
}

webサービスやアプリを作っていると様々な例外を処理しなければいけませんが、まずは簡単な例外を処理しましょう。下記コードを記述して例外を発生させてみます。

<?php
class Divi {
  public static function div($num1, $num2){
    if($num2 == 0){
      throw new Exception('0で割れません');
    }
    return $num1 / $num2;
  }
}

 ?>
<html>
<head>
<meta charset="utf-8">
<title>例外処理</title>
</head>
<body>
  <?php
    require_once "Divi.php";
    print Divi::div(5,0);
  ?>
</body>
</html>

表示してみると0で割れませんと表示されるのと一緒に色々エラーが表示されますね。数値を0で割ることはできないので普通ならWarning: Division by zeroとエラーが出ますがここではthrow new Exception(‘0で割れません’);と記述しているのでそう表示されます。

ここでtry…catchで例外処理を行ってみましょう。

<html>
<head>
<meta charset="utf-8">
<title>例外処理</title>
</head>
<body>
<?php
require_once "Divi.php";
try {
  print Divi::div(5,0);
} catch (Exception $e){
  print $e->getMessage();//エラーメッセージを表示
}
  ?>
</body>
</html>

0で割れませんとだけ表示されるようになりましたね。tryブロックの中でエラーが発生したのでcatchブロックに飛び、エラーメッセージが表示されるようになりました。Divi.phpで0の場合は例外クラスをnewして投げると記述しており、引数に0で割れませんという文言を指定しているのでgetMessageでその文言を取得しています。このように、例外が発生しそうな箇所を予測しておけばプログラムがエラーで終了することはありません。
気をつけておきたいのはtryブロックで例外が発生した場合次の処理は読まれずtryブロックから飛びますので念頭に置いてください。

また、Exceptionクラスのメソッドは多く用意されておりますが、後々説明していきます。

コメント

タイトルとURLをコピーしました