2015年10月20日

PHP while文と無限ループ

«
»


1つ前の記事で、料理をテーマにwhile文を説明する際に
こんなプログラムを紹介しました。
 

1
2
3
4
5
6
7
8
<?php
 
while(true){ //無限に繰り返せ
    if(串をにんじんに刺してスッと入ったら){
        break; //繰返しの強制終了
    }
    //待つ
}

 
煮込み系料理の煮込み加減をwhile文を使って表しています。
ここで2つ、新しい書き方が登場しています。
今回は無限ループという現象を中心に書いていきたいと思います。

無限ループとは

無限ループとは、その名の通り、無限に繰り返す(ループ = loop)
してしまう現象です。
例えば、こんなプログラムが無限ループとなります。
 

1
2
3
4
5
6
<?php
$i = 0; //初期化する
while($i < 4){
    echo $i;
    echo "<br>"; //改行
}

実行結果

php 無限ループ

解説

スクリーンショット 2015-10-18 6.36.43
 
上図にあるように、今回のサンプルプログラムは$iの値を変化させる変化式が
記述されていません
。そのため、$iはずっと0のままとなり、永遠に$iが4以上に
なることは無く、無限にループすることになります。
 
これが無限ループです。
もう一つサンプルを見てみましょう。

サンプルプログラムその2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$i = 0;
 
while(true){ //trueまたは1と書くと無限ループ
    echo $i;
    echo "<br>";
 
    $i++; //変化式
 
    if($i >= 4){
        break; //ループを強制終了
    }
 
}

実行結果

php while true

解説

今度は変化式を入れたのでちゃんと実行出来ました。
このプログラムの特徴の1つ目は whileの()の中の終了条件が「true」= 真
となっている部分です。
 
実は()の中にtrue または、 1 と書くと無限ループを意味します。
何回繰り返せばいいかが事前にわからない時、trueや1を用います。
 
特徴のもう一つはbreakです。英単語の意味どおり、break = 壊す、です。
breakと書くと強制的にループをぬけ出すことができます。
従って、先ほどのプログラムでは$iが4以上になったときに無限ループを
脱出します。
 
余談ですが、私は大学時代のプログラミングの課題で良く無限ループを
起こしていました。。。当時は無限ループを起こすと、大学院生の
ティーチングアシスタントのところにいって、無限ループを止めてもらうように
お願いしなければならなかったので恥ずかしい思いをしました。

まとめ

今回は無限ループについて書いていきました。
 

・変化式を正しく記述しないと無限ループが発生してしまう
・while()の終了条件にtrue,1と書くと無限ループに設定できる
・breakを使うことでループを強制終了することができる

【関連する記事】