PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】ループ処理 (while文とdo-while文)

PHPプログラミングのキービジュアル

第3のループ処理

これまでループ処理は「foreach文」と「for文」が登場しました。
foreach文は、記事「【PHPプログラミング入門講座】配列とループ処理 (foreach文)」で説明しました。
for文は、記事「【PHPプログラミング入門講座】ループ処理 (for文)」で説明しました。

今回は、第3のループ処理「while文」と「do-while文」について説明します。

while文

while文は条件がtrueであり続ける限り、繰り返され続ける処理です。
構文は次の通りです。

<構文>

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

早速サンプルプログラムを書きます。

<サンプルプログラム>

<?php
  $num = 0;
  while($num < 3) {
    echo $num . '回目です。<br>';
    $num++;
  }

分かりやすいように図を使って説明します。

PHPのwhile文の説明図

図内の番号に対して説明します。

(1) 変数$numの値を0で初期化します。
  ※変数に初期値を代入する処理のことを「初期化」と言います。

(2) 初期化した$numの値0が、while文の条件「$num < 3」を満たすかどうか(結果がtrueになるかfalseになるか)を判定します。
 trueの場合は、whileブロック内の処理に移ります。
 falseの場合は、whileブロック内の処理は実行されません。

(3) 変数$numの値を使って文字列を出力しています。
 1回目にwhileブロックに入ってきた時は、$numの値は0なので「0回目です。<br>」と出力されます。

(4) $numを1増加させています。
 whileブロックの最後まで処理が行われると、図内の緑の矢印のようにwhileブロックの最初に戻ります。
 そして、while文の条件「$num < 3」の判定をします。
 この条件がtrueであれば、1増加した$numの値を使って再びwhileブロックの処理が実行されます。
 最終的に、while文の条件「$num < 3」がfalseになった時点でwhile文のループ処理(whileループ)は終了します。

最後に、このサンプルプログラムの実行結果は次のようになります。

<実行結果>

0回目です。
1回目です。
2回目です。

無限ループ

先ほどのサンプルプログラムのwhileブロック内の最後の処理「$num++;」を書かなかった場合の処理について考えてみましょう。
次のようなプログラムになります。

<?php
  $num = 0;
  while($num < 3) {
    echo $num . '回目です。<br>';
  }

この場合、変数$numの値が永遠に増えないため、いつまでたってもwhile文の条件「$num < 3」がtrueになることがありません。
そのため、while文のループ処理が永遠に実行され続けます。
このような状態のことを「無限ループ」と呼びます。
無限ループはプログラムのバグです。

無限ループが発生すると、PHPプログラムはしばらく固まったような状態になり、最後にエラーが発生し終了します。
無限ループは、PHPプログラムを実行しているサーバーに負荷を書ける処理ですので、可能な限り発生させないように注意しましょう。

do-while文

while文の亜種として、do-while文というのがあります。
構文は次の通りです。

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

上記から分かるように、do-while文はブロックの後ろにwhile(条件)を記述する構文です。
つまり、必ず一度はブロック内の処理をして、最後に条件判定を行い、ループ処理を終了するかどうか判断します。

サンプルプログラムを書きます。

<サンプルプログラム>

<?php
  $num = 0;
  do {
    echo $num . '回目です。<br>';
    $num++;
  } while($num < 3);

分かりやすいように図を使って説明します。

PHPのdo-while文の説明図

図内の番号に対して説明します。

(1) 変数$numの値を0で初期化します。

(2) do-whileブロックの最初は「do」を書きます。
 ここはそのままスルーしてブロック内の処理に進みます。

(3) 変数$numの値を使って文字列を出力しています。
 1回目にdo-whileブロックに入ってきた時は、$numの値は0なので「0回目です。<br>」と出力されます。

(4) $numを1増加させます。

(5) 最後に条件「$num < 3」を満たすかどうか(結果がtrueになるかfalseになるか)を判定します。
 この条件がtrueであれば、図内の緑の矢印に従い、再びdo-whileブロックの最初に処理が戻ります。
 falseであれば、do-whileブロックから抜け出してループ処理が終了します。

最後に、このサンプルプログラムの実行結果は次のようになります。

<実行結果>

0回目です。
1回目です。
2回目です。

do-while文についてですが、正直、使う機会はめったに無いです。
筆者は20年以上プログラミングやっていますが、1、2回くらいしか使ったことがないと思います。
ループ処理は、foreach文、for文、while文で足りるからです。
いちおう、こんな構文もあることを知っておくくらいでOKです。

おわりに

今回は、PHPのループ処理while文、do-while文について説明しました。
PHPのループ処理は、foreach文、for文、while文、do-while文の4種類です(※注1)。
プログラミングができるようになるには、ループ処理の理解は必須です。
これまでのこの連載記事「PHPプログラミング入門講座」の記事を読んだり、練習問題を解いたりして、自分で何も見なくても書けるようになっておきましょう。
while文、do-while文の練習問題を次の記事に書くので、頑張ってチャレンジしてみてくださいね!

※注1:あえて言うと、他に「goto文」という構文を使ったループ処理があります。
 ただ、非常に古い書き方であり、今は使われていません。
 goto文は、プログラムの任意の場所にジャンプできてしまう処理であるため、プログラム構造を崩し、可読性が低くなり、バグが発生しやすくなります。
 もし、使ったら他のエンジニアから注意されると思います。
 禁断の呪文レベルなので使用しないようにしましょう。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , , , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.