PHPで繰り返し処理を書くとき、while文は知っていてもdo while文は曖昧なままという方は少なくありません。ですが、条件判定のタイミングが異なるだけで、実装の意図やコードの読みやすさに大きく関わる場面があります。
特に入力チェック、メニュー処理、最低1回は実行したいループでは、do while文が自然に書けるかどうかで理解度に差が出ます。
この記事では、PHP do while 文の基本構文から、while文との違い、具体例、注意点、実務での使い分けまでを丁寧に解説します。
初学者の復習にも、現場での書き分け確認にも役立つ内容として、読みやすいHTML構成でまとめました。
PHP do while 文の基本をわかりやすく解説
PHPのdo while文は、繰り返し処理を行う制御構文のひとつです。最大の特徴は、条件判定より先に処理本体を1回実行する点にあります。通常のwhile文では、最初に条件を確認し、条件が偽なら1回も実行されません。これに対してdo while文は、条件が偽であっても最初の1回だけは必ず処理されます。
この性質を理解しておくと、入力値の初期確認、メニュー表示、再試行処理など、最低1回の実行が前提となるロジックで自然に使えるようになります。
また、PHPでは文末のセミコロンを忘れやすい点も重要です。doブロックの閉じかっこの後にwhileを書き、その末尾にセミコロンが必要です。見た目は小さな違いですが、構文エラーの原因として非常に多いため、基本の段階でしっかり押さえることが大切です。
do while文の要点
・処理を先に実行する
・条件判定は後で行う
・少なくとも1回は必ず実行される
・whileの後ろにはセミコロンが必要
do while文の構文と書き方
PHPのdo while文は、次の流れで記述します。まずdoの後に中かっこで囲んだ処理本体を書き、その後ろにwhile 条件式 を置きます。処理を実行してから条件式を評価し、真であれば再び同じ処理を繰り返します。
書式としてはシンプルですが、while文と異なり条件が後ろに来るため、見慣れていないと少し読みにくく感じることがあります。そこで、処理内容を短く保ち、変数名を明確にすることで可読性を高めるのが実践的です。
たとえば、カウンタを1から3まで表示したい場合は次のように書けます。
$i = 1;
do {
echo $i . "<br />";
$i++;
} while ($i <= 3);
このコードでは、まず1を表示し、その後で条件を確認します。結果として1、2、3の順に出力されます。条件式と更新処理の位置関係を意識すると、do while文の動作が理解しやすくなります。
必ず1回実行される仕組み
do while文が初心者にとって分かりにくいのは、条件式の評価順が一般的なwhile文と逆だからです。通常のwhile文では、最初に条件を確認してから処理を行います。一方、do while文は処理を実行したあとに条件を確認するため、条件が最初から偽でも1回目の実行は行われます。
この違いは、挙動の予測に直結します。たとえば、初期値がすでに条件を満たしていないケースでは、while文は0回、do while文は1回実行されます。
次の比較はイメージしやすい例です。
| 構文 | 条件が最初から偽の場合 |
|---|---|
| while文 | 1回も実行されない |
| do while文 | 1回だけ実行される |
この性質は、初回表示や初回入力を伴う処理と相性が良いです。ただし、不要な1回が発生しないかを必ず確認する必要があります。
セミコロンや中かっこで失敗しやすいポイント
PHPのdo while文では、文法上の小さなミスがエラーの原因になりやすいです。特に多いのが、whileの末尾に付けるセミコロンの書き忘れです。if文やwhile文の感覚で書いてしまうと、最後のセミコロンを忘れやすくなります。
また、中かっこの対応関係が崩れると、どこまでが繰り返し対象なのか分かりにくくなります。処理が複数行にわたる場合はインデントを整え、ブロック構造を明確にしておくことが重要です。
失敗を防ぐには、次の点を確認すると効果的です。
- whileの後ろに必ずセミコロンを付ける
- カウンタ変数の更新を書き忘れない
- 条件式が真のままにならないか確認する
- 中かっこの開始位置と終了位置を揃える
基本構文を正しく書けるようになるだけで、do while文に対する苦手意識はかなり減ります。
while文との違いと使い分けの考え方
PHPで繰り返し処理を学ぶと、while文とdo while文の違いで迷う方が多いです。どちらも条件付きでループさせる構文ですが、使い分けの基準は単純です。最初に条件確認をしたいならwhile文、最低1回は処理したいならdo while文と考えると整理しやすくなります。
重要なのは、文法上の違いだけでなく、コードの意図が読み手に伝わるかどうかです。実務では書けること以上に、なぜその構文を選んだのかが可読性に影響します。
そのため、単に同じ動きをさせるのではなく、仕様に合った構文を選ぶ視点が必要です。ここでは違いと使い分けを具体的に整理します。
while文とdo while文の違い
while文とdo while文の最大の違いは、条件を評価するタイミングです。while文は先判定、do while文は後判定です。これだけ聞くと小さな差に思えますが、ループの初回動作に大きな影響があります。
たとえば、データが存在するときだけ処理したいならwhile文が自然です。一方、まず画面を1回表示して、その後ユーザー操作に応じて繰り返したいならdo while文のほうが意図に合います。
比較すると次のようになります。
| 項目 | while文 | do while文 |
|---|---|---|
| 条件判定 | 処理の前 | 処理の後 |
| 初回実行 | 0回の可能性あり | 必ず1回実行 |
| 向いている場面 | 条件成立時のみ処理 | 最低1回必要な処理 |
この違いを理解すると、似た構文でも選択理由が明確になります。
do while文が向いているケース
do while文が役立つのは、最初の1回を必ず実行したい場面です。たとえば、CLI形式のメニュー表示、入力値の再入力処理、一定条件を満たすまでの確認処理などが代表例です。最初に画面を出す、入力を受ける、処理結果を表示するといった流れは、後判定の構文と相性が良いです。
また、初回処理とループ処理を分離せずに書けるため、同じコードを重複して書かずに済む利点もあります。これは保守性の面でも有効です。
do while文が向く例
・メニューを表示して継続確認を行う処理
・最低1回は入力を受け付ける処理
・初回実行後に終了条件を判断する確認ループ
逆に、初回実行そのものが不要な場合はwhile文のほうが安全です。使いどころを見極めることが重要です。
可読性を高める使い分けのコツ
実務では、動けばよいだけでは不十分です。ほかの開発者が見たときに、意図がすぐに伝わる構文を選ぶことが大切です。do while文は便利ですが、使う場面が限られるため、読み手によっては少し注意深く読まれます。
そのため、do while文を使うなら、なぜ最低1回必要なのかが分かる変数名や処理内容にするのが効果的です。たとえば、menuContinue や retryInput のように役割が伝わる命名にすると、後判定の理由も理解しやすくなります。
さらに、処理ブロックを長くしすぎないことも重要です。条件判定が末尾にある以上、処理が長すぎると全体を読まないとループ条件が把握できません。必要なら関数化して責務を分けると、可読性と保守性を両立できます。
PHP do while 文の実践例とよくあるミス
do while文は構文自体は簡単でも、実際に書くと無限ループや条件ミスが起きやすい構文です。特に、更新処理の書き忘れ、比較演算子の誤り、真偽値の想定違いは頻出です。
ここでは、実用的なコード例を通して理解を深めながら、つまずきやすいポイントを整理します。基本を知っている方でも、ミスの傾向を確認しておくことで、より安全に記述できるようになります。
カウンタを使った基本例
最も基本的な例は、カウンタ変数を使って一定回数だけ繰り返すパターンです。これはdo while文の流れを把握するのに適しています。初期値を設定し、処理内で表示や計算を行い、その後でカウンタを更新して条件判定を行います。
シンプルですが、更新処理がなければ条件が変化せず、無限ループに陥るため、学習段階でも丁寧に確認したい部分です。
$count = 1;
do {
echo "現在の値は " . $count . "<br />";
$count++;
} while ($count <= 5);
この例では1から5まで順に表示されます。処理の最後で$countを増やしているため、条件が変化し、適切なタイミングでループが終了します。do while文の最初の練習として非常に分かりやすい形です。
入力チェックや再試行処理の例
do while文の強みがよく表れるのは、入力チェックや再試行のように、まず1回は処理を行う必要がある場面です。たとえば、ユーザーに値を入力してもらい、条件を満たすまで繰り返す処理では、初回入力が必須なので後判定が自然です。
Webアプリケーションでは単純な対話式入力とは形が異なりますが、考え方としてはバリデーション再実行や確認フローでも応用できます。
このようなケースでは、ループ条件を分かりやすい論理にすることが重要です。条件式が複雑になると、継続条件なのか終了条件なのかが分かりにくくなります。否定条件が連続する場合は、途中で真偽の意味を整理してから書くとミスを減らせます。
無限ループを防ぐための注意点
do while文で最も注意したいのは無限ループです。後判定である以上、少なくとも1回は必ず実行されるため、条件や更新の設計が甘いと意図せず処理が止まらなくなります。特に、カウンタの増減方向が条件と合っていない場合や、条件に使う変数を更新していない場合は典型的な原因です。
また、比較演算子の選び方にも注意が必要です。小なりと大なりを逆にするだけで、終了しないコードになることがあります。
無限ループ防止の観点では、次の確認が有効です。
- 条件に使う変数が毎回更新されているか
- 更新方向と条件式が一致しているか
- 初期値が想定どおりか
- 例外的な値でも終了できるか
開発時には短いテストコードで挙動を確認し、意図した回数で止まるかを先に確かめると安全です。
まとめ
PHPのdo while文は、処理を先に実行し、その後で条件を判定するという特徴を持つ繰り返し構文です。while文との違いは小さく見えて、初回実行の有無や実装意図に大きく関わります。
最低1回は必ず処理したい場面ではdo while文が適しており、メニュー表示、再試行、入力確認などで力を発揮します。
一方で、セミコロンの書き忘れや更新処理の不足による無限ループには注意が必要です。構文だけを覚えるのではなく、なぜdo while文を使うのかまで意識すると、より自然で読みやすいコードになります。
PHP do while 文を正しく使い分けられるようになれば、繰り返し処理の表現力は確実に広がります。まずは小さなサンプルから試し、while文との違いを実際に体感してみてください。
コメント