概要
if / else の 2 分岐を 1 行・1 つの式 で書ける短縮記法が三項演算子 (条件) ? 真の値 : 偽の値 だ。「変数に入れる値を 2 択で決めたい」「関数の引数に渡す値を条件で切り替えたい」のように、文ではなく 値が欲しい 場面で活躍する。たとえば $label = $score >= 60 ? "合格" : "不合格"; のように書けば、if / else を 4 行使わずに 1 行で済む。
PHP 7 で追加された Null 合体演算子 ?? は、三項演算子と似て非なるもの。$a ?? $b は「$a が null または 未定義 なら $b、それ以外なら $a」を返す。$_GET['name'] ?? 'guest' のように、配列キーが存在するかどうかをチェックしつつデフォルト値を当てたいときに便利で、三項演算子 + isset() の組み合わせを置き換える定番イディオムだ。「null のときだけ代替値」なのか「falsy 全般で代替値」なのかで ?? と ?: を使い分ける。
便利な一方、三項演算子を ネストしすぎると一気に読めなくなる のが落とし穴。$a ? $b : $c ? $d : $e のように連鎖させると、PHP の評価順序の歴史的経緯もあって挙動を読み違えやすい (PHP 8 ではネストに括弧必須に変更された)。2 階層以上ネストしそうになったら、素直に if / elseif か match 式に戻す方が結果的に読みやすい。短く書ける ≠ 良いコード を肝に銘じる章。
学習目標
(条件) ? 真の値 : 偽の値で if/else を 1 行に書ける- 値を 2 択で選ぶ場面で三項演算子を使い分けられる
- 三項演算子の 使いすぎは可読性を下げる ことを意識する
ドリル
| no | 内容 |
|---|---|
| 01 | 点数で合格/不合格を 1 行で判定 |
| 02 | 整数の絶対値を ?: で求める |
📝 演習: ドリル 01 — 点数で合格/不合格
問題
標準入力で整数 (点数) を 1 行受け取り、
60 点以上 なら 合格、それ未満なら 不合格 を出力してください。
判定には 三項演算子 ?: を必ず使うこと (if/else は使わない)。
入力例:
75
期待される出力:
合格ヒント
$n = (int) trim(fgets(STDIN));で整数として読む$result = ($n >= 60) ? "合格" : "不合格";echo $result . "\n";