1. 本記事のポイント
- PHPのnull合体演算子(??)と三項演算子(?:)の違いと使い分けを解説
- 実行可能なサンプルコードと出力付きで動作を明示
- 実務における使いどころや注意点も併せて紹介
2. PHPのnull合体演算子・三項演算子とは?
PHPにおけるnull合体演算子(??
)と三項演算子(?:
)は、いずれも「条件に応じた値の選択」に使われる構文です。
null合体演算子(??
)は、左側の値がnullであるかどうかを評価し、nullであれば右側の値を返します。
主に「デフォルト値の設定」や「未定義変数の代替処理」で利用されます。
一方、三項演算子(?:
)は、条件式の真偽値に応じて2つの値から選択する構文です。
条件がtrueであれば前者、falseであれば後者が返されます。
いずれも短く簡潔な記述を可能にするため、テンプレート処理やAPIレスポンス整形など実務の現場で頻繁に利用されます。
3. 詳細解説
null合体演算子(??)の基本構文
以下のように、左辺がnullであれば右辺を返します。
// ユーザーが入力した値(なければデフォルト)を取得する
$input = $_GET['name'] ?? 'ゲスト';
echo $input; // 例: パラメータがなければ "ゲスト"
この演算子は、変数が未定義またはnullの場合に備えて値を設定する典型例です。
isset()を使った記述より簡潔かつ可読性が高くなります。
三項演算子(?:)の基本構文
条件式がtrueかfalseかに応じて返す値を選択します。
// 年齢によってラベルを決める
$label = ($age >= 20) ? '成人' : '未成年';
echo $label; // 例: 年齢が18なら "未成年"
三項演算子は、条件分岐が1行で収まるため、テンプレート出力などで重宝されます。
ただし、条件式が複雑な場合は読みづらくなるため注意が必要です。
簡易三項演算子(省略形)との違い
PHPでは左辺を評価してそのまま返す「省略形」も存在します。
$value = $title ?: 'デフォルトタイトル';
echo $value;
この構文は、$titleがfalsyな値(null、空文字、0など)の場合に右辺を返します。
null合体演算子(??
)との違いは、null以外のfalsyも対象に含まれる点です。
null合体演算子と三項演算子の選定基準
- “nullかどうか” を判定したい →
??
- “条件式がtrue/falseか” で選びたい →
?:
- “falsy値も考慮したい” → 簡易三項演算子
これらの選定を明確にしないと、意図しない挙動やバグを引き起こす原因になります。
4. よくあるミス・誤解・落とし穴
null合体演算子は”nullかどうか”しか見ません。空文字やfalse、0はnullではないため、意図通りに動かないことがあります。
$value = "" ?? "初期値"; // 結果: 空文字
この場合、空文字はnullではないのでそのまま返されます。
また、三項演算子を多重にネストすると可読性が著しく下がります。
// 可読性が低くなる例
$label = $x ? ($y ? 'A' : 'B') : ($z ? 'C' : 'D');
このような場合は、if-else文に分解するほうが保守性に優れます。
最後に、??
と?:
はPHP 7以降で使える構文であるため、PHP 5系では使用できません。
バージョンによっては構文エラーとなる点に注意が必要です。
5. まとめ
PHPのnull合体演算子(??
)と三項演算子(?:
)は、条件に応じた値の選択に便利な構文です。
nullだけを対象にする??
、真偽値を判定する?:
、falsy全般を対象とする省略形と、用途に応じて正しく使い分けることが重要です。
バージョン互換性や可読性への配慮も含め、場面に応じて柔軟に選定する設計判断が求められます。