[PHP-users 14082] for文の無限ループが起きてしまう

Ihara Yoshinori php-users@php.gr.jp
2003年 3月 19日 (水) 02:13:18 JST


こんにちわ。Iharaと申します。いつも拝見させて頂いています。
質問するのは今回が初めてです。

一般的なfor文の仕様について質問があります。

例題)

for( $i = 0; $i < $no; $i++ ) {
    echo "$i";
}
というfor文があったときに、$no に 0 が入っていると無限ループに陥ってしま
うと
http://www.aqube.pos.to/fly/php/php110.html
に記載されています。

しかし、PHPの日本語マニュアル
i http://www.php.net/manual/ja/control-structures.for.php )を読むと、こ
のように記載されています。
----- マニュアルより --------
for (式1; 式2; 式3) 文
最初の式(式1)は、ループ開始時に無条件に 評価(実行)されます。

各繰り返しの開始時に、式2が評価されます。 その式の値がTRUEが場合、ループ
は継続され、括弧内の文が 実行されます。 値がFALSEの場合、ループの実行は
終了します。

各繰り返しの後、式3が評価(実行)されます。

各式は、空とすることができます。式2を空にすることは、 無限実行ループを意
味します。
----------------------------

とここで、質問です。
$no に 0 が入っていた場合、一回目のループで、$i = 0 となるわけですか
ら、
$i < 0 がFALSE になり、ループがここで終了すると思うのですが、
実際は、やはり無限ループになってしまいます。

ということで、
if( $no > 0 ) {
    for( $i = 0; $i < $no; $i++ ) {
        echo "$i";
    }
}
と変更し、問題なく動作しましたので、解決はできたのですが、どうもすっきり
しません。確か昔、C言語を使っていたときは、大丈夫だったと思うのです。
そういう仕様なのだからあきらめろって言われればそれまでなんですが・・・
これってどうなんでしょうか?
それとも私のプログラムの記述間違いか認識不足ですか?

よろしくお願いします。

追伸・・・
ちなみに、$no に -1が入っていたとしても駄目なので、if( $no > 0 )という
判定文にしました。
現在使用しているバージョンは 4.3.1 です。

Ihara ( senjyu@f2.dion.ne.jp )




PHP-users メーリングリストの案内