概要

if / else の 2 分岐を 1 行・1 つの式 で書ける短縮記法が三項演算子 (条件) ? 真の値 : 偽の値 だ。「変数に入れる値を 2 択で決めたい」「関数の引数に渡す値を条件で切り替えたい」のように、文ではなく 値が欲しい 場面で活躍する。たとえば $label = $score >= 60 ? "合格" : "不合格"; のように書けば、if / else を 4 行使わずに 1 行で済む。

PHP 7 で追加された Null 合体演算子 ?? は、三項演算子と似て非なるもの。$a ?? $b は「$anull または 未定義 なら $b、それ以外なら $a」を返す。$_GET['name'] ?? 'guest' のように、配列キーが存在するかどうかをチェックしつつデフォルト値を当てたいときに便利で、三項演算子 + isset() の組み合わせを置き換える定番イディオムだ。「null のときだけ代替値」なのか「falsy 全般で代替値」なのかで ???: を使い分ける。

便利な一方、三項演算子を ネストしすぎると一気に読めなくなる のが落とし穴。$a ? $b : $c ? $d : $e のように連鎖させると、PHP の評価順序の歴史的経緯もあって挙動を読み違えやすい (PHP 8 ではネストに括弧必須に変更された)。2 階層以上ネストしそうになったら、素直に if / elseifmatch 式に戻す方が結果的に読みやすい。短く書ける ≠ 良いコード を肝に銘じる章。

学習目標

ドリル

no 内容
01 点数で合格/不合格を 1 行で判定
02 整数の絶対値を ?: で求める

演習: ドリル 01 — 点数で合格/不合格

問題

標準入力で整数 (点数) を 1 行受け取り、 60 点以上 なら 合格、それ未満なら 不合格 を出力してください。

判定には 三項演算子 ?: を必ず使うこと (if/else は使わない)。

入力例:

75

期待される出力:

合格

ヒント

この章を AI に聞く

  1. 「ch06 — 三項演算子」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch06 — 三項演算子」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch06 — 三項演算子」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch06 — 三項演算子」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE