by shigemk2

当面は技術的なことしか書かない

PHP で例外処理を使ってみる

PHPプロ!TIPS+
とりあえずこれを参考にしてみました。

例として、引数名からクラスインスタンスを生成し、クラスのメソッドを呼び出す関数があるとする。

<?php
class Hoge {
  function high() {
    echo '最高に';
  }
}

class Foo {
  function high() {
    echo 'ハイって';
  }
}

class Bar {
  function high() {
    echo 'やつだ';
  }
}

// 引数が Hoge Foo Bar 以外のものだったらどうするのだろう?
function call_func($class) {
  $c = new $class;
  $c->high();
}

call_func('Hoge');
call_func('Foo');
call_func('Bar');
call_func('Hyaa');

でもこんな書きかたしたら、もしHoge Foo Bar以外の文字列、もしくは数字が
call_funcの引数になったら、エラーが起こって破綻するだろう。

そこで、例外処理を使って書き換えてみたい。

<?php
class Hoge {
  function high() {
    echo '最高に';
  }
}

class Foo {
  function high() {
    echo 'ハイって';
  }
}

class Bar {
  function high() {
    echo 'やつだ';
  }
}

// 引数の中身を基にインスタンスを生成している。
// 定義したクラス名以外のものが引数になったら、
// エラーになるだろう。
function call_func($class) {
  switch($class) {
  case 'Hoge':
  case 'Foo':
  case 'Bar':
    $c = new $class;
    $c->high();
    break;
  default:
    throw new Exception('無効なクラス名' . PHP_EOL);
  }
}
try {
  call_func('Hyaaa');
 } catch (Exception $e) {
   echo "エラー:" . $e->getMessage(); //メッセージ表示
 }

call_func('Hoge');
call_func('Foo');
call_func('Bar');

結果はこんな感じです。

エラー:無効なクラス名
最高にハイってやつだ