メモのコツを教えてください!

宜しくお願い致します。
下記のサンプルをご覧頂きたいのですが、

<?php

function division($a,$b){
try{
if($b === 0){
throw new Exception("cannot divide by 0");
}

echo $a / $b;

} catch (Exception $e){
echo $e->getMessage();
}
}

division(7, 2);
division(5, 0);

?>

下記の部分について教えてください。

if($b === 0){
throw new Exception("cannot divide by 0");
}

上記はcatch部分にエラーを投げているのはわかるのですが、なぜ、throwが必要なのでしょうか?

エラーが起こりそうな個所をtry~catchで囲むだけで例外処理が行えると思っておりました。
throwは例外を発生させて投げるとありましたがイメージがしにくいです・・・。

もう、一点教えて頂きたいのですが、下記のプログラムの例外処理についてどう思われますか?
無駄な処理等があればご教示頂きたいです。

<?php

$lock = 'test.csv';

foreach($_POST as $value){
$data[] = $value;
}

mb_convert_variables('SJIS','UTF-8',$data);

try {

$file = new SplFileObject($lock, 'ab');

if ($file->flock(LOCK_EX)) {
$file->fputcsv($data);
$file->flock(LOCK_UN);

} else {
echo "ロックを正常に行えませんでした";
}

} catch (Exception $e) {
echo "CSVファイルを閉じてください。";
exit;
}

header("Location: ./thanks.html");

?>



最後まで、ご覧下さりましてどうもありがとうございました。

質問者からの補足コメント

  • >SplFileObjectのくだりはせっかくなんだし
    元の質問にあるようなthrow構文で書く方がよいのでは?

    上記についてですが、どのように書けば良いでしょうか?

      補足日時:2016/04/19 10:07

A 回答 (1件)

tryの中でthrowしているので分かりづらいかもしれませんが


関数とtry~catch構文を分ければイメージできませんか?

<?php
function division($a,$b){
if($b === 0){
throw new Exception("cannot divide by 0");
}
echo $a / $b;
}
try{
division(7, 2);
division(5, 0);
} catch (Exception $e){
echo $e->getMessage();
}
?>

SplFileObjectのくだりはせっかくなんだし
元の質問にあるようなthrow構文で書く方がよいのでは?
    • good
    • 0
この回答へのお礼

yambejp様

早々にご回答を頂きましてどうもありがとうございます。
throw文をtry~catchの外に書けるのは知りませんでした。

勉強になりました!感謝致します。

お礼日時:2016/04/18 19:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!