PHP if else で条件ロジックを分岐する方法

PHP の if else は真偽式を評価し、結果に応じて2つ以上のコードブロックのどれかを実行します。結果が相互排他的で順序に依存する場合は、elseif で追加条件を連結します。実行されるのは最初に一致した分岐だけなので、最も厳しい条件を先に置きます。範囲チェック、複合式、型が混在する判定に依存する分岐ロジックでは、if/elseif/else が基本の制御構文になります。

条件分岐のための PHP If Else の例

出力:

ここに出力が表示されます...

出力:

成績: B

この例の仕組み

  1. $score82 という整数値を保持します。
  2. if 条件 $score >= 90false なので、PHP はそのブロックをスキップします。
  3. elseif 条件 $score >= 80true なので、PHP は2つ目のブロックを実行して 成績: B を出力します。
  4. すでに前の分岐が一致しているため、else ブロックは実行されません。PHP は最初の truthy 条件に一致した時点でチェーンの評価を止めます。

PHP の elseif とは?

PHP の elseif は、既存の if ブロックに新しい条件を追加します。PHP は各 elseif を上から順に評価し、true になった最初の分岐だけを実行して残りをスキップします。必要なだけ elseif を重ねられますが、通常は3〜4個を超えると match やルックアップ配列に置き換えた方が読みやすくなります。中かっこ構文では else if(2語)と elseif(1語)は同じ挙動ですが、代替構文(if: ... endif;)では1語の elseif だけが有効です。

PHP If Else でよくある間違い

条件式で ===== ではなく = を使う

悪い例:

if ($role = "admin") { // $role に "admin" を代入し、常に truthy
    echo "アクセスを許可";
}

正しい例:

if ($role === "admin") {
    echo "アクセスを許可";
}

if の中で代入すると変数の値が書き換わり、代入した値自体が返るため、分岐が無条件に実行される原因になります。

中かっこを省略してインデント頼みにする(dangling else

悪い例:

if ($isAdmin)
    if ($isActive)
        echo "ok";
    else
        echo "管理者ではありません"; // 内側の if に結び付く

正しい例:

if (!$isAdmin) {
    echo "管理者ではありません";
} elseif ($isActive) {
    echo "ok";
}

中かっこがない場合、else は未対応の最も近い if に結び付きます。中かっこを使うか、1つの if/elseif/else チェーンに組み直してください。

PHP If/Elseif と Switch と Match の違い

機能if/elseifswitchmatch (PHP 8+)
比較の種類任意の式緩やかな比較 (==)厳密比較 (===)
値を返すかいいえいいえはい
フォールスルー該当なしあり(break がない場合)なし
向いている用途範囲判定、複合条件共有ロジックを持つ多数の離散値離散値を厳密比較で結果に対応付ける場合

条件に範囲判定、複合ロジック、関数呼び出しが含まれる場合は if/elseif を使います。離散値を厳密比較で結果に対応付けるなら match に切り替えます。case ごとにフォールスルーや文ブロックが必要な場合は switch を使います。

さらに例を見る

ネストを減らすガード節:

function process($input) {
    if (!is_string($input)) {
        return "無効な型";
    }
    if ($input === "") {
        return "空文字列";
    }
    return strtoupper($input);
}

早期 return を使うと、ネストした if/else ツリーを置き換えて、メインロジックを最上位のインデントに保てます。

単純な2分岐代入には三項演算子の短縮形:

$label = ($count > 0) ? "項目あり" : "空";

分岐の結果が単一の値になる場合、三項演算子 ? : を使うと完全な if/else ブロックを1つの式で置き換えられます。

FAQ

PHP で elseifelse if の違いは何ですか?

中かっこ構文({ })では両者は同等で、PHP は else ifelse の後にネストされた if として扱います。代替構文(if: ... endif;)では、1語の elseif だけがコンパイルされます。スタイル間のリファクタリングで構文エラーを避けるため、常に elseif を使うのが安全です。

PHP の条件式は ===== のどちらを使うべきですか?

== は型変換を伴う比較を行います。PHP 7 では 0 == "foo"true でしたが、PHP 8 では非数値文字列に対して false に変更されました。=== は型変換せず、値と型の両方を比較します。特にユーザー入力や混在型データでは、予測可能な結果のために === を優先してください。

PHP では elseif を複数書けますか?

はい。PHP では1つのチェーンに elseif をいくつでも追加できます。条件は上から順に評価され、実行されるのは最初に truthy になった分岐だけです。どれも一致せず else がある場合は、それがデフォルトとして実行されます。分岐が4〜5個を超えるなら、match やルックアップ配列の方が読みやすくなります。