@ってなに?

まず一番上の変数。php7からは便利な書き方が紹介されました。

$number1 = $_GET['number1'] ?? 0;
$number2 = $_GET['number2'] ?? 0;
$operator = $_GET['operator'] ?? '';

??の意味は、左にある値はnullと等しければ、右の値になる。なので、GETの値は何もなければ、つまり何も入力されてない時は、右の値が代入されます。if文の機能と同じですが、短い書き方と解釈してください。

でも文字などの入力をどうやって防ぐの?

$number1 = floatval($number1);
$number2 = floatval($number2);

floatvalっていう関数を使います。それは何かというと、入れられた値を、floatの形に変えます。つまりいたずらで文字を入れても、それをこの関数で変えられて、想定通りにプログラムが動きます。

つまり問題/エラーを隠すんじゃなくて、処理する。

この書き方だと、switch文に入ってるresult変数から@を消していいです。

もう一つは、割り算に関しては、number2には0が入る時の処理をしなければならない。数学的には現在無理な計算ですので、自分のエラーメッセージを出さなければなりません。

case 'divide':
    if (0 == $number2) {
        $result = '0の割り算は不可能です!';
    } else {
        $result = $number1 / $number2;
    }
    break;

こうすれば、計算処理が実行されず、エラーを防ぎました。もし@$resultにしておいて、数字2に0の値を入れたら、なんもエラーも表示されず、何が裏で起こってるかはわからないなので、デバッグができません。

でも@を使うのは必ずしもダメではありません。どんな処理をしてもしつこく出るメッセージはありますので、場合によりますが、使うことがあるんじゃないでしょうか。でも大事なのは、エラーメッセージを隠すではなく、エラーを防ぐ、もしくは処理すること。

Happy coding!

Leave a Reply

Create your own website, free on WordPress.com.Create your own website.
Start free