【PHP入門】条件分岐の書き方 if・elseif・else・switch・matchを使い分ける

PHPで「条件によって処理を変える」ときは、ifelseifelseを使います。選択肢が多い場面ではswitch、値を返す分岐にはmatchも便利です。

この記事では、点数や会員区分を例に、条件分岐をどの順番で書けばよいかを初心者向けに解説します。比較演算子を先に確認したい方は、比較演算子の基本を読んでから進めてください。

この記事でできるようになること

  • ifelseifelseで条件を分ける
  • &&||!で複数条件を組み合わせる
  • switchmatchを場面に応じて使い分ける
  • 代入と比較、文字列と数値の比較で起こりやすいミスを避ける

if文の基本

ifの丸括弧には、結果がtrueまたはfalseになる条件を書きます。条件がtrueなら、中括弧の中が実行されます。

<?php
$age = 20;

if ($age >= 18) {
    echo "成人です";
}

この例では$age >= 18trueなので、「成人です」と表示されます。

elseで条件に当てはまらない場合を書く

elseは、ifの条件がfalseだった場合に実行する処理です。

<?php
$age = 15;

if ($age >= 18) {
    echo "成人です";
} else {
    echo "18歳未満です";
}

elseifで3通り以上に分ける

条件が複数ある場合はelseifを使います。上から順番に判定し、最初にtrueになったブロックだけが実行されます。

<?php
$score = 82;

if ($score >= 90) {
    echo "評価A";
} elseif ($score >= 70) {
    echo "評価B";
} elseif ($score >= 50) {
    echo "評価C";
} else {
    echo "再挑戦";
}

実行結果は「評価B」です。$score >= 70に当てはまった時点で、それより下の条件は調べません。

条件は範囲が狭いものから書く

次のように70点以上を先に書くと、95点でも最初の条件に当てはまり「評価B」になってしまいます。

<?php
$score = 95;

// 90点以上の条件へ到達しないため、意図した結果になりません
if ($score >= 70) {
    echo "評価B";
} elseif ($score >= 90) {
    echo "評価A";
}

点数のように大きい値から判定する場合は、90点、70点、50点の順に並べましょう。

論理演算子で条件を組み合わせる

演算子意味
&&両方とも満たす$age >= 18 && $hasTicket
||どちらかを満たす$isAdmin || $isEditor
!条件を反対にする!$isClosed
<?php
$age = 20;
$hasTicket = true;

if ($age >= 18 && $hasTicket === true) {
    echo "入場できます";
} else {
    echo "入場できません";
}

複雑な条件は、意味のある変数名に分けると読みやすくなります。

<?php
$age = 20;
$hasTicket = true;
$canEnter = $age >= 18 && $hasTicket;

if ($canEnter) {
    echo "入場できます";
}

値だけでなく型も比較する

==は型を変換してから比較する場合があります。初心者のうちは、値と型の両方を比較する===!==を基本にすると、予想外の判定を減らせます。

<?php
$input = "10";

var_dump($input == 10);   // true
var_dump($input === 10);  // false(文字列と整数で型が異なる)

フォームから受け取った値は文字列になることが多いため、必要に応じて型変換や入力検証を行いましょう。

switch文:同じ値を何度も比較する

switchは、一つの値に対して複数の候補を調べるときに使えます。各caseの最後にbreakを書くのを忘れないようにしてください。

<?php
$role = "editor";

switch ($role) {
    case "admin":
        echo "すべての操作ができます";
        break;
    case "editor":
        echo "記事を編集できます";
        break;
    default:
        echo "記事を閲覧できます";
}

match式:値を安全に返す

PHP 8以降ではmatch式を使えます。switchと違い、比較には厳密比較が使われ、breakも不要です。分岐結果を変数へ代入したい場面に向いています。

<?php
$status = "paid";

$message = match ($status) {
    "pending" => "支払い待ちです",
    "paid" => "支払い済みです",
    "cancelled" => "キャンセルされました",
    default => "不明な状態です",
};

echo $message;

if・switch・matchの使い分け

使うもの向いている場面
if / elseif / else大小比較、範囲、複数条件を組み合わせる
switch一つの値に対して複数の処理を実行し分ける
match一つの値から安全かつ簡潔に結果を返す

よくある間違い

比較のつもりで代入しない

=は代入、===は比較です。条件式でif ($status = "paid")と書くと、比較ではなく代入になってしまいます。

条件を一行へ詰め込みすぎない

条件が長くなったら、途中結果を名前付きの変数へ分けます。何を判定しているかが読みやすくなり、修正もしやすくなります。

練習問題

年齢が12歳以下なら「子ども料金」、65歳以上なら「シニア料金」、それ以外なら「通常料金」と表示してください。

解答例を見る
<?php
$age = 68;

if ($age <= 12) {
    echo "子ども料金";
} elseif ($age >= 65) {
    echo "シニア料金";
} else {
    echo "通常料金";
}

まとめ

  • 範囲や複数条件はif / elseif / elseで判定する
  • 同じ値の候補を並べるならswitchまたはmatchを使う
  • 比較は===!==を基本にする
  • 上から判定される順番を意識する

次は、条件分岐を繰り返し処理と組み合わせてみましょう。foreach文の使い方では、配列を一つずつ処理する方法を学べます。

PHP学習ロードマップへ戻る

関連記事

コメント

この記事へのコメントはありません。