例外処理

 プログラムで処理をしている最中に何らかの処理によりエラーが発生する場合があります。通常、そのようなエラーが発生するとアプリケーションは停止してしまいます。しかし、エラーが発生したときは、特別な処理をして引き続きアプリケーションを動作させたいという場面が出てきます。ここでは、エラーが発生したときの対処方法を見てみましょう。

 オブジェクト指向言語ではエラーのことを「例外」と呼んでいます。エラーが発生する、つまり、例外が発生することを、「例外がスローされる」といいます。発生した例外の種類に応じ例外に対応するオブジェクトが生成され、スローされます。スローされた例外を取得(キャッチ)して、エラーメッセージを表示させるなどの処理を行います。

例外処理の書式
try{
 通常の処理
}catch(例外クラス名 変数名){
 例外処理
}

○ ファイル

 Webページを作成して確認してみましょう。「InterfacePolymoTest.php」をコピーして「TryCatchTest.php」を作成してください。

ファイルの種類 PHPファイル
ファイル名 TryCatchTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

TryCatchTest.php

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3.  <meta charset="utf-8">
  4.  <head>
  5.   <title>例外処理</title>
  6.  </head>
  7.  <body>
  8. <?php
  9. try{
  10.  //判定するデータをセット
  11.  $num = 'a';
  12.  //$num = '123';
  13.  //数値かどうか
  14.  if(!is_numeric($num)){
  15.   throw new Exception('数字を入力してください。');
  16.  }
  17.  //入力したデータを表示する
  18.  print('数値「' . $num . '」が入力されました。');
  19. }catch(Exception $e){
  20.  print($e -> getMessage());
  21. }
  22. ?>
  23.  </body>
  24. </html>

○ 解説

 9~21行目はtryブロックです。この中に通常の処理を書きます。このブロック内で例外がスローされると、21行目から定義されているcatchブロックに飛びます。

 15行目では、is_numeric関数を呼び出して、引数の変数に格納されているデータが数値として扱えるかどうかを判定しています。falseが返ってくる、つまり数値として扱えないと判断された場合は、16行目のthrow文によって例外をスローしています。throw文については次の節で詳しく学習します。このスローされた例外オブジェクトはcatchブロックで処理されます。

 21~23行目はcatchブロックです。catchの引数にキャッチする例外の型を持った変数を宣言します。このブロックは複数記述することができます。Exception型を指定すると、すべての例外をキャッチすることができます(Exceptionはすべての例外クラスのスーパークラス)。このブロック内でエラーメッセージなどの処理を記述します。

○ 実行結果

「$num = ‘a’;」の場合

実行例(文字がセットされた場合)
実行例(文字がセットされた場合)

「$num = ‘123’;」の場合

実行例(数字がセットされた場合)
実行例(数字がセットされた場合)

前へ   次へ