3-4. 制御構文

今まで学習してきたプログラムは、上から下へと順番に処理する流れでした。

しかしプログラムとは本来もっと複雑な流れになります。具体的には、以下のような流れがあります。

  • 順次
  • 選択
  • 繰り返し、または反復

選択とは、ある条件を満たせば流れを変えるという制御です。繰り返しや反復とは、ある条件を満たすまで実行、という制御です。

今回は上記のうち、選択を解説します。

if文

PHPにて選択を実現するには、if文またはswitch文があります。それぞれの特徴を見極めて、適切に使い分けられるようにしましょう。

まずは if文から解説します。

if 文 (条件が成り立てば実行)

if文は英単語のif(もし〜ならば)から分かるように、この条件を満たせば処理を実行しなさい、という構文です。

if ( 条件式 ) {
// 処理;
}

( 条件式 )とは、結果をtrueまたはfalseで返却するものです。そうです、前章で学んだ比較演算子もここに入れることができます。ちょっとやってみましょう。

<?php
$a = 3;
$b = 9;

if ($a < $b) {
  echo $b . "は" . $a . "より大きい\n";
}

if ($b % 3 == 0) {
  echo $b . "は3で割り切れるので3の倍数です\n";
}

実行すると、以下のように表示されます。

9は3より大きい
9は3で割り切れるので3の倍数です

$aが3、$bが9だとすると、$a < $bは3 < 9でtrueになるのは分かりますか?言葉で表現すると「はい」になりますね。ifは「もしも〜だったら」の意味でもあります。

よって、最初のif文は $a < $b だったら、波カッコの中を実行しなさい、となったので9は3より大きいと表示されたわけです。

if 文(条件が成り立たない場合を考慮)

先ほどの例は条件が成り立てば実行、でした。条件が成り立たない時は何も実行されません。

条件が成り立たない時を考慮する場合は、else を使います。

<?php
$a = 3;
$b = 9;

if ($a > $b) {
  echo $b . "は" . $a . "より大きい\n"; // trueの時
} else {
  echo $a . "は" . $b . "より小さい\n"; // falseの時
}

if ($b % 2 == 0) {
  echo $b . "は2で割り切れるので2の倍数です\n"; // trueの時
} else {
  echo $b . "は2で割り切れないので2の倍数ではありません\n"; // falseの時
}

3は9より小さい
9は2で割り切れないので2の倍数ではありません

最初のif文は、$a > $b だったら最初の波かっこの中身を実行し、$a > $bでなかったら次の波かっこの中を実行しなさい、という意味になります。$aを9、$bを3というように大小関係を逆にしたり、$bを偶数や奇数に変えてみたりして結果を確認してください。

2つめのif文は、$bを2で割って余りがゼロなら2の倍数、そうでなければ2の倍数でないという判断をさせています。これは偶数か奇数かどちらなのかを求めていることと同じですね。

switch文

今まで出てきたif文は、もし〜だったら〜、そうでなければ〜といった単純な分岐でした。この分岐が複雑になるとどうなるでしょうか?とても見通しの悪いプログラムになります。

<?php
$weather = "sunny";

if ($weather == "rainy") {
  echo "今日は雨です\n";
} elseif ($weather == "cloudy") {
  echo "今日は曇りです\n";
} elseif ($weather == "sunny") {
  echo "今日は晴れです\n";
} else {
  echo "その他の天気です\n";
}

今日は晴れです

最初に代入した$weatherという変数に応じて、表示する内容を変えています。もちろん見て分からなくはないのですが、何となく見通しが悪いですね。その見通しの悪さを解消できるswitch文というものがあります。

switch (変数) {
case 変数値;
〜〜処理〜〜
break;
case 変数値;
〜〜処理〜〜
break;
default;
〜〜処理〜〜
}

上記のプログラムをswitch文で書き換えてみましょう。

<?php
$weather = "sunny";

switch ($weather) {
  case "rainy":
    echo "今日は雨です\n";
    break;
  case "cloudy":
    echo "今日は曇りです\n";
    break;
  case "sunny":
    echo "今日は晴れです\n";
    break;
  default:
    echo "その他の天気です\n";
}

今日は晴れです

$weatherという変数に注目し、その値によって処理を振り分ける、という流れが見通せるプログラムになったのではないでしょうか。defaultは、それまでの振り分けのいずれにも引っかからない場合に実行されるブロックです。

本章ではif文とswitch文を解説しました。

プログラムの特性を考慮して、適切な方を選択してください。

次の記事

学習の進め方