PHP入門 第13回 制御構文
if
この構文は、命令の条件実行を可能にします。
1 2 |
if (式) 文 |
使用例)
$a が $b より大きい場合、aはbより大きい を表示します。
1 2 3 4 |
<?php if ($a > $b) echo "aはbより大きい"; ?> |
条件分岐させたい文が一つ以上ある場合もあります。
もちろん、1文ずつ文をif 文で括る必要はありません。
代わりに、複数の文をグループ化することができます。
使用例)
$a が $b よりも大きい場合に aはbよりも大きいを表示し、 $a の値を $b に 代入します。
1 2 3 4 5 6 |
<?php if ($a > $b) { echo "aはbより大きい"; $b = $a; } ?> |
if文の基本的な構文とは、異なる構文もあります。
開き波括弧をコロン(:)、閉じ波括弧を endif;で記述します。
1 2 3 |
<?php if ($a == 5): ?> Aは5に等しい <?php endif; ?> |
else
ある条件が満たされている場合にある文を実行し、 その条件が満たされていない場合に別の文を実行したいと考えた ことが度々あるかと思います。
このためにelseがあります。
elseは、if文における式の値が FALSEの場合にある文を 実行するようにif文を拡張します。
使用例)
$aが $bよりも大きい場合に aはbより大きいと表示し、 そうでない場合に、 aはbよりも大きくないと表示します。
elseif/else if
elseifは、その名前から分かるように、if とelseの組み合わせです。
elseifは、 elseのように、元のif式の値が FALSEの場合に別の文を実行するようにif 文を拡張します。
しかし、elseとは異なり、elseif式が TRUEの場合にのみ代わりの式を実行します。
使用例)
aはbより大きい、 aはbに等しい、 aはbより小さいを出力します。
1 2 3 4 5 6 7 8 9 |
<?php if ($a > $b) { echo "aはbより大きい"; } elseif ($a == $b) { echo "aはbと等しい"; } else { echo "aはbより小さい"; } ?> |
while
whileループは処理を行うことができます。
whileループの構文は次のようになります。
1 2 |
while (式) 文 |
while文は、式の値がTRUEである間、 入れ子の文を繰り返し実行することをPHPに指示します。
式の値は各反復処理の開始時にチェックされるので、ループ内の文の実行により この値が代わった場合でもループ実行は各ループを終るまで終わりません。
while式の値が初めからFALSEの 場合は、内部の文は一回も実行されません。
使用例)
1 2 3 4 5 6 7 8 |
<?php $i = 1; while ($i <= 10) { echo $i++; /* 出力される値は、足される前の $iの値です。 (後置加算) */ } ?> |
whileの異なる構文)
1 2 3 4 |
while (式): 文 ... endwhile; |
do-while
do-whileループは、論理式のチェックが各反復の 最初ではなく最後に行われること以外は、whileループと 全く同じです。
通常のwhileループとの主な差は、 do-whileループは最低1回の実行を保証されていることです。
do-whileループの構文は次のようになります。
1 2 3 4 |
do { 文 ... } while (式); |
使用例)
1 2 3 4 5 6 |
<?php $i = 0; do { echo $i; } while ($i > 0); ?> |
for
for ループは、PHPで最も複雑なループです。
for は、Cのforループと同様に動作します。
forループの構文は、次のようになります。
1 2 |
for (式1; 式2; 式3) 文 |
最初の式(式1)は、ループ開始時に無条件に 評価(実行)されます。
各繰り返しの開始時に、式2が評価されます。 その式の値がTRUEが場合、ループは継続され、括弧 内の文が実行されます。値がFALSEの場合、ループの 実行は終了します。
各繰り返しの後、式3が評価(実行)されます。
各式は空にすることもできますし、複数の式をカンマで区切って指定することもできます。
式2 でカンマ区切りの式を使用すると、 すべての式を評価します。しかし、結果として取得するのは最後の式の結果となります。
式2 を空にすると、無限実行ループになります。
使用例)
以下の例はすべて 1 から 10 までの数を表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php /* 例 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; } /* 例 2 */ for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; } /* 例 3 */ $i = 1; for (; ; ) { if ($i > 10) { break; } echo $i; $i++; } /* 例 4 */ for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++); ?> |
for文の異なる構文
1 2 3 4 |
for (式1; 式2; 式3): 文; ... endfor; |
foreach
foreach文は、配列要素に関する反復処理が容易になります。
この構造には、 2種類の構文があります。
2番目の構文はあまり知られていませんが、 最初の構文の便利な拡張になっています。
foreachの構文は次のようになります。
1 2 3 4 |
foreach (array_expression as $value) 文 foreach (array_expression as $key => $value) 文 |
最初の形式は、array_expressionで指定した配列に 関してループ処理を行います。
各ループにおいて現在の要素の値が $valueに代入され、内部配列ポインタが一つ前に 進められます。
2番目の形式も同様ですが、各ループで現在の要素のキーが変数 $keyに代入されるところが異なります。
使用例)
1 2 3 4 5 6 |
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } ?> |
foreachの異なる構文
1 2 3 4 |
foreach (array_expression as $value): 文 ... endforeach; |
break
breakは、現在実行中の for, foreach, while, do-while, switch 構造の実行を強制的に終了します。
break では、オプションの引数で ネストしたループ構造を抜ける数を指定することができます。
使用例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php $arr = array('one', 'two', 'three', 'four', 'stop', 'five'); while (list(, $val) = each($arr)) { if ($val == 'stop') { break; /* ここでは、'break 1;'と書くこともできます */ } echo "$val<br />n"; } /* オプション引数を使用します */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br />n"; break 1; /* switch 構造のみを抜けます */ case 10: echo "At 10; quitting<br />n"; break 2; /* switch と while を抜けます */ default: break; } } ?> |
continue
continue は、ループ構造において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用されます。
continueでは、オプションの引数で 処理をスキップするループ構造のレベルの数を指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php while (list($key, $value) = each($arr)) { if (!($key % 2)) { // キーが偶数の組をスキップします continue; } do_something_odd($value); } $i = 0; while ($i++ < 5) { echo "Outer<br />n"; while (1) { echo " Middle<br />n"; while (1) { echo " Inner<br />n"; continue 3; } echo "This never gets output.<br />n"; } echo "Neither does this.<br />n"; } ?> |
swich
switch文は、同じ式を用いてIF文を並べたのに似ています。
同じ変数を異なる値と比較し、値に応じて異なったコードを実行したいと 思うことがしばしばあるかと思います。
switch文は、まさにこのためにあるのです。
switchの構文は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
swich (式) { case 値: 文 ... break; case 値: ... default: 文 ... } |
使用例)
次の二つの例は、同じことを二つの異なった方法で書いたものです。 一つは、if文を、もう一つはswitch 文を使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php if ($i == 0) { echo "iは0に等しい"; } elseif ($i == 1) { echo "iは1に等しい"; } elseif ($i == 2) { echo "iは2に等しい"; } switch ($i) { case 0: echo "iは0に等しい"; break; case 1: echo "iは1に等しい"; break; case 2: echo "iは2に等しい"; break; } ?> |
switch文を記述するときにbreakの記述を忘れると複数のcase文が実行されるので注意が必要です。
例えば、
1 2 3 4 5 6 7 8 9 10 11 |
<?php $i = 0; switch ($i) { case 0: echo "iは0に等しい"; case 1: echo "iは1に等しい"; case 2: echo "iは2に等しい"; } ?> |
この場合、出力結果は、「iは0に等しいiは1に等しいiは2に等しい」となります。
これは、breakがない為に複数のcase文が実行されることにより起きます。なのでひとつのcaseを実行させたい場合は必ず各caseの終わりにbreakを記述するようにしましょう。
switchの異なる構文
1 2 3 4 5 6 7 8 9 10 11 |
swich (式): case 値: 文 ... break; case 値: ... default: 文 ... endforeach; |
declare
ようわからん???だれか教えて・・・。
return
関数内で呼び出されると、return()文は即座に その関数の実行を停止し、引数を関数の値として返します。
return()はまた、eval()文や スクリプト自体の実行を終了させることが出来ます。
グローバルスコープで呼び出されると、現在実行中のスクリプトが終了 します。
もしそのスクリプトがinclude()もしくは require()されたものである場合、制御は呼び出し元 のファイルに戻ります。
また、そのスクリプトがinclude() されたものである場合は、return()に与えられた引数 の値はinclude()の戻り値となります。
return()がメインスクリプトで呼び出された場合は スクリプトが終了します。
include
include()文は指定されたファイルを読み込み、評価します。
つまり、PHPファイルを動的に実行することができます。
include対象のファイルが存在しない場合、Warningを出力し処理を続行します。
include対象のファイルがパースエラーの場合はエラーとなり処理は中断します。
includeでのファイルの捜索範囲はphp.iniにて設定された、include_pathの値が使用されます。
ワーキングディレクトリ(getcwd()で取得できる値)から相対パスとしてinclude_pathで探します、
値の返し方: 読み込まれたファイル内では、ファイルの実行処理を終了し呼出側の スクリプトに戻るためにreturn()文を実行することが可能です。
使用例)
test.phpを実行するとinclude先のvars.phpを実行し$colorと$fruitに値を設定します。
test.php
1 2 3 4 5 6 7 8 9 |
<?php echo "A $color $fruit"; // A include 'vars.php'; echo "A $color $fruit"; // A green apple ?> |
vars.php
1 2 3 4 5 6 |
<?php $color = 'green'; $fruit = 'apple'; ?> |
require
include() とほぼ同じですが、ファイルの読み込みに失敗した場合に Fatal Error となり致命的なエラーが発生し処理を中断します。
それ以外はincludeと同じ動作をします。
include_once
include_once()命令は、スクリプトの実行時に指定 したファイルを読み込み評価します。
この動作は、 include()命令と似ていますが、ファイルからのコー ドが既に読み込まれている場合は、再度読み込まれないという重要な違い があります。
返り値は include() と同じです。
ファイルが既に読み込まれている場合は、この関数は TRUE を返します。
require_once
require_once() 文は require() とほぼ同じ意味ですが、 ファイルがすでに読み込まれているかどうかを PHP がチェックするという点が異なります。
すでに読み込まれている場合はそのファイルを読み込みません。
goto
goto 演算子を使用すると、 プログラム中の他の命令にジャンプすることができます。
ジャンプ先はラベルとコロンで表し、 goto の後にそのラベルを指定します。
使用例)
制御構文は、色々ありますがそれぞれ適時使えるようになると便利なので覚えておきましょう
コメント:0件
トラックバック:1件
[...] 第13回 制御構文 [...]