![]() |
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
|