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');
結果はこんな感じです。
エラー:無効なクラス名
最高にハイってやつだ