PHP入門 | 制御構文 | whileとdo while文

続いて「繰り返し」を行う構文を見ていこう。繰り返しとは、同じような処理を何度も実行する構文である。繰り返し文にもいくつか種類があるが、もっともわかりやすいのはwhileを使った構文だろう。

1. 最初に条件を確認する。

while (条件) {
    ...... 繰り返し処理 ......
}

中括弧の代わりにコロン(:)とendwhileを使うこともできる。

while (条件):
    ...... 繰り返し処理 ......
endwhile;

2. 最後に条件を確認する。

do {
    ...... 繰り返し処理 ......
} while (条件);

この構文には、条件を確認してから繰り返す方法と、繰り返し部分を実行した後で条件を確認する方法の2種類が用意されている。条件にはifと同じく、論理値(trueまたはfalse)で表される式や値を設定する。

一般的には「最初に確認する」方法を使うことが多い。後で確認する方式は、最初から条件がfalseの場合でも繰り返し部分を実行してしまうため、やや特別な場合に限って使われる。

簡単な例を見てみよう。

<?php
    $num = 1;
    $total = 0;
    while($num <= 100){
        $total += $num;
        $num++;
    }
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <div>
            <?php echo "合計: " . $total; ?>
        </div>
    </body>
</html>

この例では、1から100までの整数をすべて足した結果を表示している。ここではwhile ($num <= 100)のように条件を設定し、$numの値が100以下である間は繰り返しを続けるようにしている。

代入演算子

実行している処理は$total += $num;という計算である。これは「$total$numを加える」という意味だ。これは等号(=)のように左辺の変数へ値を代入する「代入演算子」である。主な記号は次のとおりである。

説明
A += B AにBを加え、その結果をAに代入する。
A -= B AからBを引き、その結果をAに代入する。
A*= B AにBを掛け、その結果をAに代入する。
A /= B AをBで割り、その結果をAに代入する。
A %= B AをBで割った余りをAに代入する。

この代入演算子は、通常の等号(=)による代入式をより書きやすくしたものだ。たとえば$total += $num;という式は、$total = $total + $num;と同じ意味である。比べてみると、$total += $num;のほうがすっきりしていてわかりやすい。

インクリメント演算子

また、ここでは$num++;を実行している。この++という記号は、値を1だけ増やす機能を持つ。これを「インクリメント演算子」と呼ぶ。

同じように、--という記号で表す「デクリメント演算子」もある。これは変数の値を1だけ減らす機能を持つ。

++--は式の中に含めることもできる。今回の例なら、次のように書くこともできる。

$total += $num++;

こうすると、2行の処理を1つの文で済ませられる。

また、これらの演算子は変数の前にも後にも書ける。たとえば++$num$num++のように記述する。この2つは動作が微妙に異なるので注意が必要である。

変数の前に演算子を付けると、変数が式などで利用される場合、1を加算または減算した後の値が式で使われる。変数の後に演算子を付けると、まず現在の値が式で使われ、その後で1が加算または減算される。つまり、変数を使うタイミングと、1を増減させるタイミングが異なるのである。

 

とはいえ、実際に何度も使っていけば自然に覚えられる。まずは「こういう記号がある」ということだけ頭に入れておこう。