基本となる制御文(if、for、foreach、while、switch)

プログラムはもともとファイル内の上から順に下側に向かって実行されていきます。しかし、制御文を使えば、演算結果によって処理を変えたり停止したりすることが可能になり、また一定範囲の同じプログラムを繰り返し処理したりすることもできるようになります。PHPでは、「if文」「for文」「foreach文」「while文」「switch文」が代表例で、他に「break文」や「continue文」といった、繰り返し処理の中で停止したり飛ばしたりする制御文もあります。

if文(イフ、エルスイフ、エルス)

if文は、「もし~であれば~する」という意味です。条件に一致、或いは一致しなかった場合の二つを処理をします。if文単独で使うこともできますが、これに「elseif」や「else」を加えてより詳細に条件を指定することもできます。後者を使う場合、条件の数だけ{}でくくってブロックを作り、その中に処理するためのプログラムを記入していきます。ブロックの中には更にif文を入れ子にすることができ、これを「ネスト」と言います。尚、「elseif」は「if」の次から記入するもので、「if{処理}elseif{処理}elseif{処理}・・・」という形で使います。また、「else」は「if」以外のことで、「if」と「elseif」に該当しない場合の処理を「else」のブロックに記入します。書式は、「if{処理}else{処理}」、もしくは「if{処理}elseif{処理}else{処理}」といった形になります。

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$a="2";
if($a == 1){
echo '$aは1です。';
}
elseif($a == 2){
echo '$aは2です。';
}
elseif($a == 3){
echo '$aは3です。';
}
else{
echo 'いずれにも一致しません。';
}
?>
実行結果:$aは2です。

for文(フォー)

for文は、繰り返し処理を行います。書式は「for($i = 0;$i <= 10; $i++){処理}」で、通常カウンタを設置します。この例では、左側からまず$iを0とし、$iが10以下まで実行する指示、そして$i++で1ずつ足すというカウンタの増え方を指定しています。こちらもfor文の中にfor文を入れることができ、この場合二重ループと言います。

PHP
1
2
3
4
5
<?php
for($i=0;$i < 2;$i++){
echo 'おはよう。';
}
?>
実行結果:おはよう。おはよう。

foreach文(フォーイーチ)

foreach文は、配列の数だけ処理する文で、繰り返し処理の回数を前もって定めているfor文とこの点で異なります。書式は「foreach($a as $value){処理}」もしくは「foreach($a as $key => $value){処理}」となります。前者は配列の要素($value)だけを取り出す文で、後者は要素($value)と共に添字($key)も取り出せます。また、後者の場合は連想配列を処理する際にも使われます。この場合、連想配列の添字に好きな名前を入れることができ、数値以外の添字も扱えるようになります。尚、いずれの場合も「$a」には配列を入れなければなりません。

PHP
1
2
3
4
5
6
<?php
$a=array("りんご" => "赤色","ピーマン" => "緑色","レモン" => "黄色");
foreach($a as $key => $value){
echo $key.":".$value."。";
}
?>
実行結果:りんご:赤色。ピーマン:緑色。レモン:黄色。

while文(ホワイル)

while文はfor文とは異なり、条件が成立しているものの繰り返す回数が分からない場合に利用されます。構文は「while($a < 10){処理}」などで、この場合は$aが10以内から抜け出すまで繰り返すという意味になります。しかし、言い方を変えれば抜けるまで永遠に繰り返すという意味になりますので、無限ループに注意が必要です。また、$aが10や11などであれば一回も実行されません。これに対しdo~while文は、条件を最低一回以上繰り返す文です。通常のwhile文は最初のループで条件が一致しなければ一回も実行されませんが、do~while文では最低限、一度は実行されます。構文は「$i = 5;do{$i++;}while($i < 9);」などで、この場合の実行結果は「9」になります。

PHP
1
2
3
4
5
6
7
<?php
$i = 5;
while ($i < 10){
echo '$iは'.$i.'です。';
$i += 1;
}
?>
実行結果:$iは5です。$iは6です。$iは7です。$iは8です。$iは9です。

PHP
1
2
3
4
5
6
7
8
9
<?php
$a = 0;
$i = 0;
do{
++$i;
$a += $i;
}while($i < 5);
echo "1ずつ足しながら $i まで足すと $a になります。";
?>
実行結果:1ずつ足しながら 5 まで足すと 15 になります。

switch文(スイッチ)

switch文は「case:」を複数用いて、条件に一致する最初の「case:」で「break」させて終了させて使います。どれにも一致しなかった場合は、最後の「default:」に進み、そこで終了します。ポイントは「break」で、これを記述しなかった場合、全て処理してしまいます。各「case:」の最後尾には「break」を記入し、選択した処理のみを実行させるようにします。書式は「switch(式){case値a:値aの場合の処理;break;default:どのcaseにも一致しなかった場合の処理;}」となります。

PHP
1
2
3
4
5
6
7
8
9
10
<?php
$a="い";
switch($a){
case 'あ':echo '[ a ]です。';break;
case 'い':echo '[ i ]です。';break;
case 'う':echo '[ u ]です。';break;
// defaultは無くても動作します。
default:echo '[ e ]です。';
}
?>

実行結果:[ i ]です。

尚、一般にはif文の処理をswitch文で実現できる場合、switch文のほうが処理が速いと言われています。ただ、PHPのバージョンが上がるにつれて、スピードも含めて色々改善されていきますので、それほど神経質になる必要もないと思います。また、未来の予測は難しいため、まずは理解や管理のしやすさなどの観点から取り組み、時間の経過と共に問題が発生した時点で改善を試みるというやり方が良いのかも知れません。


以下の文は、ループの中で使われます。

break文(ブレイク)

break文を使うと、break;が記入された部分を基準とし、そこから最も近いブロックの終了へ処理が飛び越えます。つまり、ループ処理が中断するということになります。また、ブロックとは、「{」と「}」に囲まれた部分です。

continue文(コンティニュー)

continue文は、breakに対するもので、ループの全てを中断するのではなく、その回のループのみを中断し、次の回からはまた実行するという意味になります。


その他

シングルとダブルクォート

echoなどで出力する際に「"」で括ると、内部にそのまま記入した$aなどの変数は展開されて表示されます。例えば「echo "$a こんにちは $b";」といった感じで記入します。これに対し「'」で括った場合、展開されません。前者をダブルクォート、後者をシングルクォートと言いますが、シングルクォートを使って変数を展開させるには、変数の前後に「.」(ドット)をつけて、「echo 'こんにちは'.$a.'~です。';」という風に記入します。


以上が制御文の基本的な仕組みです。