PHPのif文・switch文で条件分岐を書く方法

phpアイキャッチ PHP

こんにちは、かつコーチです。

前回は変数について解説しました。

今回は、プログラミングの基本の中でも特に重要な「条件分岐」を扱います。

「もし〜だったら、こう処理する」という考え方は、どんなプログラムにも登場する超基本のテクニックなので、しっかり押さえておきましょう。

if文の基本

基本の書き方

条件によって処理を分けるには、if 文を使います。

<?php
$age = 20;

if ($age >= 20) {
    echo "成人です";
} else {
    echo "未成年です";
}
// 出力: 成人です
?>

「もし $age が20以上なら『成人です』、そうでなければ『未成年です』を表示する」という処理です。

if (条件) の後の { } の中に、条件が成立したときの処理を書きます。

else if で条件を追加する

条件が2つ以上ある場合は、elseif(PHPでは間にスペースを入れない)を使います。

<?php
$score = 75;

if ($score >= 90) {
    echo "評価:A";
} elseif ($score >= 70) {
    echo "評価:B";
} elseif ($score >= 50) {
    echo "評価:C";
} else {
    echo "評価:D";
}
// 出力: 評価:B
?>

上から順に条件をチェックしていき、最初に条件が成立したブロックだけが実行されます。

$score が75の場合、最初の $score >= 90 は成立しませんが、次の $score >= 70 で成立するので「評価:B」が表示されます。

比較演算子・論理演算子

よく使う演算子一覧

条件分岐でよく使う演算子をまとめておきます。

演算子意味
==値が等しい(型は問わない)
===値と型の両方が等しい
!=値が等しくない
> < >= <=大小比較
&&かつ(両方が true)
\|\|または(どちらかが true)

複数条件を組み合わせる

複数条件を組み合わせる例です。

<?php
$age = 25;
$hasTicket = true;

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

&&(かつ)や ||(または)を使うことで、1つの if 文で複数の条件をまとめてチェックできます。

条件が複雑になってきたら、変数に一度意味のある名前をつけてから if に渡すと、読みやすさが格段に上がります。

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

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

switch文:条件のパターンが多いとき

基本の書き方

同じ変数の値によって処理を細かく分けたい場合は、switch 文を使うとすっきり書けます。

<?php
$day = "水";

switch ($day) {
    case "月":
        echo "週の始まりです";
        break;
    case "水":
        echo "週の折り返しです";
        break;
    case "金":
        echo "もうすぐ休みです";
        break;
    default:
        echo "普通の日です";
        break;
}
// 出力: 週の折り返しです
?>

case に該当する値がなければ default の処理が実行されます。

elseif を何個も並べるより、こういった「同じ変数の値によって分岐する」ケースはswitch文の方が見た目がすっきりします。

つまずきやすいポイント:break の書き忘れ

フォールスルーとは

switch文で私が実際にやらかした失敗が、break の書き忘れです。

❌ Before:break を書き忘れる

<?php
$day = "水";

switch ($day) {
    case "月":
        echo "週の始まりです";
        // breakを書き忘れると…
    case "水":
        echo "週の折り返しです";
        break;
}
// 出力: 週の折り返しです("月"のcaseにヒットしていなくても意図せず実行される構造になっている)
?>

break を書かないと、該当した case の処理が終わった後も、次の case の処理までそのまま実行され続けてしまいます(これを「フォールスルー」と言います)。

私は最初、なぜか複数のメッセージが表示されてしまい、原因を探すのに小一時間かかった記憶があります。

✅ After:各 case の最後に必ず break を書く

<?php
$day = "月";

switch ($day) {
    case "月":
        echo "週の始まりです";
        break; // ここで確実に処理を終わらせる
    case "水":
        echo "週の折り返しです";
        break;
}
// 出力: 週の始まりです(意図した通りに1つだけ実行される)
?>

switch文を書くときは、各 case の最後に break を書き忘れていないか、必ず確認する癖をつけましょう。

フォールスルーをあえて使う場面

余談ですが、このフォールスルーの性質は「複数のcaseで同じ処理をしたいとき」にあえて使われることもあります。

<?php
$day = "土";

switch ($day) {
    case "土":
    case "日":
        echo "休日です";
        break;
    default:
        echo "平日です";
        break;
}
// 出力: 休日です
?>

「土」と「日」のどちらでも同じ処理をしたい場合、case "土": の直後に break を書かずに次の case "日": に処理を続けさせることで、コードをまとめられます。

意図せず起きると事故ですが、意図的に使えば便利なテクニックでもあります。

== と === の違いにも要注意

値だけの比較と型まで含めた比較

もう一つよくあるつまずきが、==(値だけを比較)と ===(値と型の両方を比較)の違いです。

❌ Before:== を使って意図しない結果になる

<?php
$userId = "1";       // フォームから送られてきた文字列
$targetId = 1;        // データベースから取得した数値

if ($userId == $targetId) {
    echo "一致しました"; // 型が違っても値が同じなら一致してしまう
}
?>

"1"(文字列)と 1(数値)は本来型が違うデータですが、== では「値としては同じ」と判定されて一致してしまいます。

ユーザーIDの照合など、厳密さが求められる場面では思わぬバグにつながります。

✅ After:=== を使って型まで含めて厳密に比較する

<?php
$userId = "1";
$targetId = 1;

if ((int)$userId === $targetId) {
    echo "一致しました"; // 明示的にキャストしてから型まで厳密に比較する
}
?>

比較する前に型を揃えたうえで === を使うことで、「値も型も一致している」という意図がコードにも表れます。

意図しない比較結果を防ぐために、迷ったら基本的に === を使うのがおすすめです。

まとめ

この記事のポイント

  • if / elseif / else で条件によって処理を分岐できる
  • 条件のパターンが多いときは switch 文がすっきり書ける
  • switch文の break の書き忘れ(フォールスルー)に注意する
  • ===== の違いを理解し、迷ったら === を使う

次に読むべき記事

条件分岐が使えるようになったら、次は「同じ処理を繰り返す」ループ処理を学んでいきます。

→ 次の記事:PHPのfor・while・foreachで繰り返し処理をマスターする

タイトルとURLをコピーしました