「三項演算子の
? と : の間を省略するとどうなるの?」「
?:(エルビス演算子)と ??(Null合体演算子)は何が違うの?」PHPでコーディングをしていると、条件分岐をスマートに記述するために三項演算子を使う機会は多いでしょう。
しかし、三項演算子の「省略形」や、似たような役割を持つ「Null合体演算子」との使い分けに迷うことはありませんか?
この記事では、PHPの三項演算子の基本から、便利な省略形(エルビス演算子)、そして間違いやすいNull合体演算子との違いについて、豊富なサンプルコードを交えて徹底解説します。

本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!

✅受講生からの評判が驚くほど良い
✅学習はハードだが未経験とは思えないほど高いスキルが身に付く
✅挫折させない万全なサポート体制が用意されている
✅採用面接で担当者に刺さるレベルの高い「ポートフォリオ」を作成できる
✅給付金を使えば実質約13万円という格安料金で受講できる
\ もちろん勧誘行為は一切なし! 相談だけでもOK! /
PHPの三項演算子とは?基本の書き方
まずは基本となる三項演算子(Ternary Operator)のおさらいです。
三項演算子は、if...else 文を一行で簡潔に書くための構文です。
基本構文 条件式 ? 真の場合 : 偽の場合
// 基本構文
条件式 ? 真の場合の式 : 偽の場合の式
条件式が true と評価された場合は「真の場合の式」の結果を、false と評価された場合は「偽の場合の式」の結果を返します。
サンプルコード:点数による合否判定
<?php
$score = 80;
// if文で書いた場合
if ($score >= 60) {
$result = '合格';
} else {
$result = '不合格';
}
// 三項演算子で書いた場合
$result = ($score >= 60) ? '合格' : '不合格';
echo $result; // 出力: 合格
?>
このように、単純な条件分岐であれば、三項演算子を使うことでコードをスッキリと記述できます。
三項演算子の省略形(エルビス演算子)とは?
PHP 5.3以降では、三項演算子の「真の場合の式」を省略して記述することができます。
これを、形がエルビス・プレスリーのリーゼントヘアに見えることから通称「エルビス演算子」と呼びます。
省略形の構文 条件式 ?: 偽の場合
// 省略形の構文(エルビス演算子)
条件式 ?: 偽の場合の式
どのような処理になるのか?
この演算子は、条件式が true と評価される場合、その条件式の値自体を返します。
条件式が false の場合は、右側の「偽の場合の式」の値を返します。
つまり、$a ? $a : $b と書くのとほぼ同じ意味になります。
(ただし、$a の評価は一度しか行われないため効率的です)
サンプルコード:デフォルト値の設定
<?php
$input_name = '田中';
// 変数に値があればその値を、なければ(空文字や0など、falseと評価される場合)デフォルト値を使う
$user_name = $input_name ?: '名無しさん';
echo $user_name; // 出力: 田中
// 値が空の場合
$input_name_empty = '';
$user_name_empty = $input_name_empty ?: '名無しさん';
echo $user_name_empty; // 出力: 名無しさん
?>
この省略形は、「値が存在すればそれを使い、なければデフォルト値を入れる」という処理に非常に便利です。
【重要】省略形(?:)とNull合体演算子(??)の違い
PHP 7.0で導入された Null合体演算子(Null Coalescing Operator) ?? は、エルビス演算子 ?: と非常によく似ていますが、その判定基準が決定的に異なります。
ここを混同すると予期せぬバグの原因になります。
Null合体演算子 ?? の特徴
Null合体演算子は、左辺が null でない場合に左辺の値を返し、null の場合に右辺の値を返します。
また、左辺の変数が定義されていなくてもエラー(NoticeやWarning)を出さずに右辺を返してくれます。
つまり、isset($a) ? $a : $b の代わりとして使えます。
比較表:判定基準の違い
| 演算子 | 書き方 | 判定基準 | 挙動(左辺を返す条件) | PHP等価コード |
|---|---|---|---|---|
| エルビス演算子 | $a ?: $b |
真偽値 (True/False) | $a が true と評価される時 |
$a ? $a : $b |
| Null合体演算子 | $a ?? $b |
存在確認 (Nullかどうか) | $a が null でない時 |
isset($a) ? $a : $b |
サンプルコードで違いを確認
以下のコードで、0、空文字 ''、null、未定義変数がそれぞれどう扱われるかを見てみましょう。
<?php
// テストする値のリスト
$values = [
'aaa' => '文字列',
'zero' => 0,
'empty' => '',
'null_val' => null,
];
// 1. 文字列の場合
echo $values['aaa'] ?: 'デフォルト'; // 出力: 文字列
echo $values['aaa'] ?? 'デフォルト'; // 出力: 文字列
// → どちらも同じ結果
// 2. 「0」の場合(重要!)
echo $values['zero'] ?: 'デフォルト'; // 出力: デフォルト (0はfalse扱い)
echo $values['zero'] ?? 'デフォルト'; // 出力: 0 (0はnullではない)
// → 数字の0を有効な値としたい場合は「??」を使うべき
// 3. 空文字「''」の場合
echo $values['empty'] ?: 'デフォルト'; // 出力: デフォルト (空文字はfalse扱い)
echo $values['empty'] ?? 'デフォルト'; // 出力: (空文字が出力される)
// → 空文字を有効としたい場合は「??」
// 4. nullの場合
echo $values['null_val'] ?: 'デフォルト'; // 出力: デフォルト
echo $values['null_val'] ?? 'デフォルト'; // 出力: デフォルト
// → どちらもデフォルト値になる
// 5. 未定義の変数の場合
// echo $undefined_var ?: 'デフォルト'; // Warning: Undefined variable 発生
echo $undefined_var ?? 'デフォルト'; // 出力: デフォルト (エラーなし)
// → 未定義の可能性がある場合は「??」一択
?>
使い分けのポイント:
- エルビス演算子
?:- 空文字、
0、false、nullなどをすべて「値がない」とみなしてデフォルト値を使いたい場合。
- 空文字、
- Null合体演算子
??0や空文字は有効な値として扱いたい場合。- 変数が定義されていない可能性がある場合(配列のキーが存在しない可能性がある場合など)。
三項演算子を省略するメリット・デメリット
省略形を使うことにはメリットとデメリットがあります。
チーム開発などでは可読性を考慮して使い分ける必要があります。
メリット:コードが簡潔になる
最大のメリットは、記述量が減り、コードがシンプルになることです。
特に、変数の初期化や、ビューファイル(HTML)内での出力において効果を発揮します。
// スッキリ書ける
<input type="text" value="<?= $user_name ?: 'ゲスト' ?>">
デメリット:可読性が下がる場合がある(ネストの注意点)
短く書ける反面、多用しすぎたり、ネスト(入れ子)させたりすると、途端に可読性が下がります。
// 読みにくい例(ネスト)
$result = $a ?: $b ?: $c ?: '全部だめ';
PHPの三項演算子は左結合(左から右へ評価される)の仕様が直感的でない場合があり、PHP 8以降ではネストした三項演算子には括弧が必須となるケースもあります。
複雑な条件分岐になる場合は、無理に省略せず if 文や match 式(PHP 8.0以降)の使用を検討しましょう。
実務で使える!具体的な活用シーン
開発現場でよく見かける、三項演算子の省略形やNull合体演算子の活用シーンを紹介します。
検索パラメータの取得(Null合体演算子)
GETパラメータなどは、送信されていない(キーが存在しない)可能性があります。
この場合は ?? が最適です。
// $_GET['page'] があればその値を、なければ 1 を代入
$page = $_GET['page'] ?? 1;
2. データベース保存時の値の正規化(エルビス演算子)
「空文字ならNULLとして保存したい」といったケースでは、エルビス演算子が役立ちます。
// 入力が空文字なら null を代入する
$save_data = $input_text ?: null;
初心者がPHPでの三項演算子省略などについて効率的に学ぶには
PHPでの三項演算子省略をはじめとするPHPのスキルを効率的に習得するには、プログラミングスクールの活用が最も近道です。
スクールでスキルを高めることにより、今の仕事に活かしたり、副業として高単価な案件を受注できたりするだけでなく、PHPエンジニアとして転職することも可能になります。
PHPエンジニアは需要が非常に高いため、それに比例して年収も高くなる傾向にあります。
「今よりも年収を上げたい」「将来性の高い職種であるエンジニアへ転職したい」といった気持ちが強い場合は、プログラミングスクールでPHPの専門スキルを習得しつつ、ポートフォリオ支援や転職支援を受けてエンジニアへ転職する、という道を目指すのもよいでしょう。
なお、「PHPに強く、受講生からの評判も良いプログラミングスクール」には、以下のようなところがあります。
- RUNTEQ
(※受講生からの評判が圧倒的に良い)
- デイトラ
(※格安料金で学べる)
- DMM WEBCAMP
(※受講コースが豊富)
その他、以下の記事でもPHPのおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。

\ 登録・利用はすべて完全無料! /
実務未経験エンジニアでも希望の転職先を見つけやすい!!
週1~3日からできる副業案件多数!!
フリーランス案件の単価の高さは圧倒的!!




