PHP 基本的な流れ(構文)
西広島ドットコムへようこそ!
|トップ|新着情報|検索|サイトマップ|
 パソコン
 ネット

現在のところ、最も内容が充実しています。

 プログラム
 地域
 学習指導
 哲学
 創作
 批評
 トレード
 リンク集

制御構造

 PHP で処理の流れを記述するために備わっている構文を制御構造と呼ぶ。 主なものに、

 if文 while文 for文 foreach文 do文 switch文 break文 continue文 require()文 include()文

がある。

if文

 if (条件式1) ブロック1 [elseif (条件式2) ブロック2] ... [else ブロック3]

 ifは「条件式1」が真なら「ブロック1」を実行し、 そうでない場合に「条件式2」が真なら「ブロック2」を実行する。 この後、複数のelseif部分をつけ加えることができる。 どれにもあてはまらない場合はelseの後の「ブロック3」が実行される。

ブロックは;で終わる1つの文か、いくつかの文を;で区切り、 それら全体を中かっこ{}で囲んだものをいう(グループ文という場合があるが、本サイトは C 同様ブロックという)。 対応関係がわかりにくい場合、できるかぎり{}でくくるのがよい。

 <?php
 /* 20.php */
   $x = $_GET[num];
   if ($x % 2 == 0) {
     if ($x % 3 == 0) printf("6の倍数\n");
     else printf("2の倍数\n");
   } else {
     if ($x % 3 == 0) printf("3の倍数\n");
     else printf("その他\n");
   }
   print <<<EOF
 <form action="<?php echo $HTTP_SERVER_VARS['PHP_SELF']; ?>" method="get">
 数字を入力: <input type="text" name="num" size="10" value="">
 <input type="submit" value="送信">
 </form>
 EOF;
 ?>

while文

 while (条件式) ブロック

 条件式が真の間はブロックを実行しつづける。

 次の例は無限ループとなる。

 while (1) printf("a");

 次の例はyと答えるまで表示を続ける。

for文

 for (初期化式; 条件式; 終端式) ブロック

 これはwhile文を使ってほぼ次のように書ける。

 初期化式;
 while (条件式) {
   ブロック
   終端式;
 }

 つまりwhile文を簡潔に短く表現するために作られた文といえる。 次の例は1から10までを2乗した数を表示する。

 for ($i = 1; $i <= 10; $i++) {
   printf("%d\n", $i * $i);
 }

foreach文

 foreach (配列 as 変数) ブロック
 foreach (配列 as キー => 値) ブロック

 最初の形式は、配列の各要素が変数部分に代入され、後の処理を繰り返す。 2 番目も同様だが、各ループで現在の要素のキーと値がそれぞれ代入されるところが異なる。

 foreach は指定した配列自体に対してではなく、そのコピーに対して処理を行うので、 返される配列要素への変更は元の配列には反映されない。

 $a = array(
   "one" => "Jan.",
   "two" => "Feb.",
   "three" => "Mar."
 );
 
 foreach ($a as $k => $v) {
   echo "$a[$k] => $v.\n";
 }

do文

 do ブロック
 while (条件式);

 do文while文と逆で、ブロックを実行した後、条件式を評価する。 つまり、最低一回ブロックが実行されることになる。 また、while (条件式)の後に必ず;が必要であることに注意する。

switch文

 switch (式) {
   case 定数式1: ブロック1
                 break;
   case 定数式2: ブロック2
                 break;
   ...
   case 定数式n: ブロックn
                 break;
   default:      ブロックn+1
 }

 は、整数、浮動小数点、文字列とすることができる。 また、case 定数式1:の後にbreak;がないと、 ブロック1につづきブロック2も実行されてしまう。

 どのcaseにも当てはまらない場合、defaultに当てはまることになる。

 <?php
 /* 21.php */
   $i = $_GET[num];
   switch ($i) {
   case 1:
     printf("You are a genius.\n");
     break;
   case 2:
   case 3:
     printf("You are a wise person.\n");
     break;
   default:
     printf("You are a fool.\n");
   }
   print <<<EOF
 <form action="<?php echo $HTTP_SERVER_VARS['PHP_SELF']; ?>" method="get">
 1-3 を入力: <input type="text" name="num" size="10" value="">
 <input type="submit" value="送信">
 </form>
 EOF;
 ?>

break文

 break;

 while文for文foreach文do文switch文のブロックで使われ、 そのブロックから抜け出し、 一つ外側のブロックに制御を移す。

 $a = array(
   "one" => "Jan.",
   "two" => "",
   "three" => "Mar."
 );
 foreach ($a as $k => $v) {
   if ($v == '') break;
   printf("$k: $v.\n");
 }

この例では、foreachのループから、 キーに対応する値が空になると脱出する。

continue文

 continue;

 while文for文foreach文do文のブロックで使われ、 そのブロックの最後に制御を移す。

 for ($i = 1; $i < 10; $i++) {
   if ($i % 2) continue;
   printf("%d ", $i);
 }
 printf("\n");

 この例は、1桁の偶数を全て表示する。 continue;により、printf("%d ", $i);は飛ばされる。

require()文

 require 'ファイル名';
 require $filename;
 require ('ファイル名');

 require() 文は指定されたファイルを読み込み、評価する。 require() と include() はエラーの扱い方を除けば全く同じである。 エラーが発生すると include() は警告を出力し、require() はエラー終了する。

include()文

 require() と同じなので、他に注意する点のみ述べる。

 読みこむファイルはまずカレントのワーキングディレクトリからの相対パスとして探され、 それから、カレントスクリプトのディレクトリからの相対パスとして探される。 いずれも include_path に注意する。

 include_path=".:/php/includes"

 例えば、include_path が . で、カレントの ワーキングディレクトリが /www/ の 場合、 include/a.php を読み込んで、そのファイルの中に include "b.php" と書いてあったとすると、 b.php がまず /www/ で探され、その後、 /www/include/ で探される。

 ファイルが読み込まれると、コードは、include() もしくは require() が実行された行の変数スコープを継承する。 つまり、呼び出し側の行で利用可能な全ての変数は、読み込まれたファイル内でも利用可能。

|サイトポリシー|プロフィール|地図|お問合せ|
2007- (C) Nishihiroshima.com RSS