CGI 作成の初歩 |
|
7. ループ処理を練習する (繰り返し処理) |
条件の間、繰り返し何らかの処理をしたいときループを使い、
下のような種類があります。
for |
回数を決めて、その間処理を繰り返す |
while |
設定条件が正しい間処理を繰り返す |
foreach |
配列に対して繰り返し処理を行う |
ここでは while を使って繰り返し処理を行ってみます。
下の例では変数 $a に初期値 0 を与え、 $a が 10より小さい間処理を繰り返します。
そして最後に 終了しました。 の文字列を表示しています。
実行結果 |
繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理
繰り返し処理
終了しました。 |
上記の例で終了の条件を 変数 $a が 10より小さい間処理を繰り返すようになっており、
print "繰り返し処理<BR>"; の後で変数 $a を 1づつ加算しています。
この加算が無かったらどうなるでしょうか?
変数 $a は永遠に 0 のままで、終了条件の 10 を超える事が無い為、無限ループとなります。
無限ループを作ってしまうと、終了させない限りサーバはこの処理を永遠に続ける事となってしまい、
異常な負荷をサーバに掛けてしまう事になりますので非常に注意しなければなりません。
繰り返し処理を行う際は、必ず終了できる条件を設定しなくてはなりません。
【関連項目】
配列に繰り返し処理を行う foreach については 配列の操作を行ってみる で説明します。
|
繰り返し処理を途中何かをする |
繰り返し処理を行っている途中で、終了条件に設定した条件以外の方法で抜けたり、
何らかの処理を行ってみます。
下の例では last (繰り返し処理を抜ける) を使って $a が 5 になった時点で終了させています。
実行結果 |
繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理
繰り返し処理
終了しました。 |
繰り返し処理自体に設定された終了条件は $a が 10 になるまでですので、10回文字列を
表示するはずですが、途中で last を使い、 $a が 5 になったら終了と指示してますので、
文字列を 5回表示した時点で繰り返し処理は終了しています。
繰り返し処理は途中で終了していますが、プログラム自体は終了しないので、
5回表示した後、その後の処理 終了しました。 を表示しています。
|
プログラムを終了させる ( exit ) |
上記の last は繰り返し処理を抜けるのみで、その後に何らかの処理が書かれていれば
引き続き、繰り返し処理の後の処理を続けますが、次は プログラム自体を終了させる exit です。
下の例では last の代わりに exit を使ってみました。
この場合はどうでしょうか?
実行結果 |
繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 繰り返し処理 |
この場合、繰り返し処理の終了ではなく、プログラム自体を終了していますので、
exit の条件 $a == 5 の時点でプログラムは終了し、その後の処理は行われません。
この exit は何らかの理由でそれ以降の処理が必要なくなった場合 (エラー処理など)
などに使います。
|
次の繰り返し処理を行う ( next ) |
繰り返し処理は { と } で囲われた部分を繰り返しますが、 next を使うと、
それ以降の処理を行わず、次の繰り返し処理に入ります。
実行結果 |
繰り返し処理 OK 繰り返し処理 OK 繰り返し処理 OK 繰り返し処理 OK 繰り返し処理
OK 繰り返し処理 繰り返し処理 OK 繰り返し処理 OK 繰り返し処理 OK 繰り返し処理 OK 終了しました。 |
ここにも無限ループの罠が隠れています。
例えば、 $a == 5 の時点で次の処理を行う next を実行していますが、この前に終了条件を決める$a に 1 加算する処理を
行わないと 変数 $a は 5 のまま次のループに入り、また next を実行となるので、永遠に終わらない無限ループとなってしまいます。
終了条件は設定したはずなのに、何らかの処理や状態で知らないうちに無限ループの罠に掛かってしまいますので注意が必要です。
|
無限ループは複雑な処理を行うほど、見つけるのも難しいので十分注意が必要です。
他の方も使うようなスクリプトでは、どのような操作をされても正しく終了できるように
特に注意が必要です。 |
|
|
|