★ wanayoo — archive 1999 http://www.php.net/manual/ja/control-structures.do.while.phpNouvelle recherche | Portail wanayoo

PHP Home Page

Manual Table of Contents
Up to 制御構造
Quick Reference
制御構造
English version of this pageGerman version of this pageItalian version of this pageFrench version of this pageHungarian version of this page
* if
* else
* elseif
* 制御構造に関する別の構文
* while
* do..while
* for
* foreach
* break
* continue
* switch
* require
* include
* require_once
* include_once
Manual: do..while
View the source code for this pageSearch the site



Previous page
 while
 Updated
Wed, 09 Aug 2000
for 
Next page


do..while

do..whileループは、論理式のチェックが各反復の 最初ではなく最後に行われること以外は、whileループと 全く同じです。通常のwhileループとの主な差は、 do..whileループは最低1回の実行を保証されていることです。 一方、通常のwhileループは、実行されないかもしれません。 (論理式は各反復の最初でチェックされるので、 最初から値がFALSEである場合はループの実行は すぐに終わります。)

do..while ループの構文は次の一つのみです。


$i = 0;
do {
    print $i;
} while ($i>0);
     

上記のループは必ず一度だけ実行されます。その原因は、最初の反復の後、 論理値のチェックを行った際に値がFALSEと なり($iは0より大きくない)、ループの実行が終了するためです。

優れたCプログラマは、コードブロック中での実行中止が可能な do..whileループの別の使用法について熟知している かもしれません。 これは、do..while(0)でコードを括り、 break 文を使用する方法です。次のコードは、この方法の例を示しています。


do {
    if ($i < 5) {
        print "i は十分大きくはありません。";
        break;
    }
    $i *= $factor;
    if ($i < $minimum_limit) {
        break;
    }
    print "iはOKです。";

    ...iを使った処理...

} while(0);
     

この例をすぐに理解できなかったり、全く理解できなかったりしても 問題ありません。この'機能'を使用しなくても スクリプトコードを書くことができますし、強力なスクリプトでさえ 作成することが可能です。


User Contributed Notes: do..while


albertjiang@yahoo.com
19-Feb-2000 10:04
I think it should be
do {
....break;......
} while(1);

instead of do....while(0);



kris@mha.ca
28-Feb-2000 08:25
No, it should not be while(1)... That would be a forever loop. What is being demonstrated here is a way of doing a goto without the goto control structure...


leonardo97@geocities.com
18-May-2000 02:13
Either camp could be correct depending on what you wanted to do. If you are wanting to escape from some code which you are only intending on running once, <pre><code>
do{..break..}while(0)
</code></pre> or
<pre><code>
do{..continue..}while(0)
</code></pre> will suffice. If you want to create an infinite loop, and then exit when some condition is met, you would need to use do{..break..}while(1). <code>break</code> exits to the next statement after the loop, whereas <code>continue</code> skips the remainder of this iteration and jumps to the next iteration.



Of course in the latter case it would be much nicer to do a <pre><code>
do..while(condition)
</code></pre> since you are running a test (internal if) every loop anywyas.



 About Notes


Previous page
 while
 Updated
Wed, 09 Aug 2000
for 
Next page





Who's responsible for this?
Top of this page

Site
Hosting:



Located in
United States
Elements of this website are subject to copyright.
Questions about installing or using PHP should be directed to one of the mailing lists.
Only questions about the website should be directed to webmaster@php.net.