連載
» 2000年09月28日 00時00分 公開

PHP4で作るWeb-DBシステム(3):実践編:PHPプログラムの書き方 (5/5)

[一志達也,株式会社東洋情報システム]
前のページへ 1|2|3|4|5       

for、whileなどの反復制御

 反復制御を実現するための命令は複数用意されていますが、while文は最初に覚えるのに適切な命令です。

■while文による反復制御

 while文は、指定した条件が満たされているあいだ「{}」に囲まれた命令を繰り返し実行します。このため、条件に注意しないと永遠にループする、無限ループにおちいってしまいます(リスト11)。

<html>
  <body>
    <?php
      $i=0;
      /* これならば10回繰り返して終了する */
      while($i<=10){
        print $i;
        $i++;
      }
      /* これでは無限ループに陥ってしまう */
      while($i<=10){
        print $i;
      }
    ?>
  </body>
</html>
リスト11 while文の例

 無限ループにおちいってしまうとプログラムは終了しなくなるだけで、エラーが発生するわけではありません。注意しているつもりでも、うっかりミスで無限ループさせることはよくあります。ここでもやはり、あらかじめプログラムをしっかりと設計して、1つ1つ動作を確かめるようにすることが重要です。

 さて、while文に続いて知っていただきたいのが、do..while文です。見ての通り、条件が最後にきていることが、do..while文の特徴です。このように、処理を実行してから条件を判断する反復制御を、後判定反復制御といいます。

 この場合、処理を実行してから条件を判断しますから、条件を満たしていなかったとしても、一度は必ず処理が実行されるのです。これに対し、先ほどのwhile文では、処理が一度も実行されない可能性があります。処理の内容に応じて、while文とdo..while文を、適切に使い分けてください。

■決められた回数処理するfor文

 最後に紹介するfor文は、決められた回数だけ処理を実行する場合に使います(図5)。式Aは、値の初期化など、最初に実行(評価)する命令を記述します。式Bは繰り返しの開始時に評価される条件を、式Cは繰り返しの最後に実行する命令を記述します(リスト12)。

<html>
  <body>
    <?php
      for($i=1; $i<=10; $i++){
        処理A;
      }
      /* このような記述も可能 */
      for ($i = 1; $i <= 10; print $i, $i++) ;
    ?>
  </body>
</html>
リスト12 for文の例

 for文に記述する式は、どれも省略可能です。値の初期化が不要な場合や、のちほど説明するように脱出条件が不要な場合には、これらを省略して記述します。ただし、その場合にも、区切りを示す「;」だけは必要です。

 このほか、PHP4からはforeach文もサポートされています。foreach文は、理解が簡単ではありませんが、配列を処理するには便利な命令です。単純に配列の先頭要素から、終端要素まで繰り返し処理を行うのであれば、foreach文が最も便利です。

 ところで、ここまででご紹介した反復制御命令は、回数が決まっている場合などの単純な条件にしか対応できません。ほとんどの場合は、これでも不足はありませんが、時として複雑な条件を使いたいこともあるでしょう。そうした場合に便利なのが、break命令とcontinue命令です。

 break命令は、反復制御の最中に実行すると、無条件に反復を終了する命令です。通常の条件とは別に、特別な条件をif文で記述して、反復を終了させるなどの使い方が考えられます。また、反復する条件が複雑な場合には、while文やfor文の条件を設けない方法も考えられます(リスト13)。

<html>
<body>
<?php
$i=0;
for(;;){
if($i==10){
break;
else
処理A;
$i++;
}
}
?>
</body>
</html>
リスト13 break文を用いる例

 もう1つのcontinue文は、反復の途中でその回を終了し、反復の先頭に戻して次の回を実行する命令です。この命令がないと処理が実現できないような場面はあまり考えられませんが、時と場合に応じて上手に使っていただければいいでしょう。ちなみに、break命令とcontinue命令は、ここまでにご紹介したすべての反復制御命令に使用できます。

 また、break命令とcontinue命令は、レベルを指定することも可能です。レベルとは、反復制御がネストしている場合に、命令を実行する範囲を指します。反復制御のネストと、レベル指定の例は、リスト14をご参照ください。

<html>
<body>
<?php
$i = 0;
while(++$i) {
switch($i) {
case 5:
echo "5<br>\n";
break 1; /* switch文のみ終了する */
case 10:
echo "10; quit<br>\n";
break 2; /* switch・while文両方終了する */
default:
break;
}
}
?>
</body>
</html>
リスト14 反復制御のネストとレベル指定

 制御構造についての説明は以上ですが、先ほどのセクションと同じく、ここでも最低限の内容だけを紹介しました。PHPでは、このほかにもさまざまな演算子を使って複雑な処理を実現できます。より深くPHPを理解したい方は、マニュアルを入手して熟読することをおすすめします。

■まとめ

 今回はここまでとしますが、PHPでのプログラミングについて、理解していただけたでしょうか。思ったよりも簡単で、拍子抜けしたのではないかな、と思います。次回は、今回の知識を応用して、PHPで用意されている関数を使ってみます。PHPで用意されている関数を使うと、より高度な処理を行えるようになり、システムの幅がぐっと広がってきます。

 次回も楽しみにしていただければ幸いです。

著者紹介

一志達也(ichishi@pochi.tis.co.jp)

株式会社東洋情報システム



前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。