PHP 入門 | 制御構文 | if 文による条件分岐

値と変数の基本が分かったので、続いて「制御構文」を学んでみよう。制御構文とは、プログラムの流れを制御するための構文である。

プログラムは、単に書かれている文を最初から最後まで順番に実行して終わるものではない。必要に応じて実行する処理を変えたり、同じ処理を必要な回数だけ繰り返したりして動作する。そのような「文をどのように実行していくか」を必要に応じて制御するための構文が制御構文である。

制御構文にはいくつかの種類がある。まずは最も重要な if 文から説明する。

if 文は条件に応じて二者択一の形で処理を実行するためのものである。次のような形で記述する。

1. 条件が合えば処理を実行する。

if (条件) {
    ... 条件が合う場合の処理 ...
}

波括弧の代わりにコロン(:)と endif を使うこともできる。

if (条件 ):
    ... 条件が合う場合の処理 ...
endif;

2. 条件が合うかどうかによって別の処理を実行する。

if (条件) {
    ... 条件が合う場合の処理 ...
} else {
    ... 条件が間違っている場合の処理 ...
}

波括弧の代わりにコロン(:)と endif を使うこともできる。

if (条件 ):
    ... 条件が合う場合の処理 ...
else:
    ... 条件が間違っている場合の処理 ...
endif;

3. 複数の条件で別の処理を実行する。

if (条件1) {
    ... 条件1が合う場合の処理 ...
} elseif(条件2) {
    ... 条件2が合う場合の処理 ...

... 必要なだけ elseif が続く ...
    
} else {
    ... すべての条件が間違っている場合の処理 ...
}

波括弧の代わりにコロン(:)と endif を使うこともできる。

if (条件1 ):
    ... 条件1が合う場合の処理 ...
elseif (条件2):
    ... 条件2が合う場合の処理 ...
    
... 必要なだけ elseif が続く ...
    
else:
    ... すべての条件が間違っている場合の処理 ...
endif;

if では、括弧の部分に「条件」を設定する。条件と言われると分かりにくいかもしれないが、「正しいか、間違っているか」という形で表せる式や値だと考えればよい。

コンピューターの世界では、たとえば「変数 a の値は 0 か」「A の値は B より大きいか」など、値や変数を確認し、その式が正しいかどうかによって別の処理を実行する。これが if の「条件」である。

この条件の括弧のあとに、実行する処理を書く。1 文だけならそのまま文を書けばよいが、複数の文を書いて実行したい場合は {} という記号で囲み、その中に実行文を書く。こうすることで「ここからここまでが実行する処理」であることを明確にできる。この {} の部分を「ブロック」と呼ぶ。

もし条件が間違っている場合に別の処理を実行したいときは、正しい条件の場合に実行する処理のあとに else を置き、間違っている場合の処理を書く。これも 1 文ならそのまま書けるが、複数の文なら {} でブロックとして囲む。

複数の条件がある場合は、elseif を使って別の条件を入れることもできる。elseif は何度でも使用できる。else は必須ではないので、使わなくてもよい。

簡単な例を見てみよう。

<?php
    $num = 12345;
    $namoji = $num % 2;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <div>
            <?php
                if ($namoji == 0) {
                    echo "{$num}は偶数です。";
                } else {
                    echo "{$num}は奇数です。";
                }
            ?>
        </div>
    </body>
</html>

ここでは変数 $num の値が偶数か奇数かを判定して表示している。偶数か奇数かは、その数を 2 で割り、余りが 0 かどうかで分かる。$namoji = $num % 2; のように余りを求め、if 文でそれが 0 かどうかによって表示内容を変えている。

ブール値と比較

ところで、今の例の if で使用された条件式は少し見慣れないかもしれない。

if ($namoji == 0) { ... 省略 ... }

等号が 2 つ並んだ == という記号が使われている。これは「比較演算子」と呼ばれるもので、右辺と左辺の値を比較するための記号である。比較演算子は次のとおりである。

説明
A == B A と B は同じである。
A != B A と B は異なる。A <> B とも書ける。
A > B A は B より大きい。
A >= B A は B 以上である。
A < B A は B より小さい。
A <= B A は B 以下である。

これらの記号を使った表現は、「その表現が正しいかどうか」を表すために使用される。ここでは if ($namoji == 0) があった。これは $namoji が 0 と同じか、つまり $namoji が 0 かどうかを調べ、それが正しければその後の処理を実行する。

コンピューターでは、このように正しいかどうかを表す場面が多い。この「正しいかどうかを表す二者択一の状態」を表すために使用できる値が「ブール値」である。

これは true または false という予約語で表される。たとえば「A == B が正しい」ときは true、そうでない場合は false である。ここで挙げた比較演算子も 2 つの値を確認し、true または false を返す。

つまり、if の条件とは「ブール値で表されるもの」である。括弧内の条件式が true なら実行する、という構造になっている。

この論理値はプログラミングで非常によく登場する。条件演算子のようなものでも使用できるし、一般的な変数として使うこともできる。たとえば「二者択一の値」が必要な場合は、ほとんどこの真偽値が使われると考えてよい。

数値やテキストと違い、プログラミングに慣れていない場合はあまり聞いたことがない値かもしれない。今の段階でぜひ覚えておこう。