記事内にはプロモーションが含まれています

PHPの三項演算子を省略!エルビス演算子とNull合体演算子の違い・使い分けを徹底解説

PHPの三項演算子を省略!エルビス演算子とNull合体演算子の違い・使い分けを徹底解説 プログラミングの疑問解決
「if文をもっと短く書きたい」
「三項演算子の ?: の間を省略するとどうなるの?」
?:(エルビス演算子)と ??(Null合体演算子)は何が違うの?」

PHPでコーディングをしていると、条件分岐をスマートに記述するために三項演算子を使う機会は多いでしょう。

しかし、三項演算子の「省略形」や、似たような役割を持つ「Null合体演算子」との使い分けに迷うことはありませんか?

この記事では、PHPの三項演算子の基本から、便利な省略形(エルビス演算子)、そして間違いやすいNull合体演算子との違いについて、豊富なサンプルコードを交えて徹底解説します。

【著者プロフィール&本記事の信頼性】
プロフィール
  • 著者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼 ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
プロフィール詳細はコチラ


当ブログ著者
当ブログ著者
忖度は一切なし!
本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!
【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) $atrue と評価される時 $a ? $a : $b
Null合体演算子 $a ?? $b 存在確認 (Nullかどうか) $anull でない時 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 ?? 'デフォルト'; // 出力: デフォルト (エラーなし)
// → 未定義の可能性がある場合は「??」一択
?>

使い分けのポイント:

  • エルビス演算子 ?:
    • 空文字、0falsenull などをすべて「値がない」とみなしてデフォルト値を使いたい場合。
  • 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のおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。

おすすめエージェント
当ブログ著者
当ブログ著者
\ 当ブログ著者厳選! /
\ 登録・利用はすべて完全無料! /
未経験からのエンジニア転職を成功させたい
ユニゾンキャリア
実務未経験エンジニアでも希望の転職先を見つけやすい!!

スキルを活かして副業で稼ぎたい
MidWorks(ミッドワークス)
週1~3日からできる副業案件多数!!

フリーランスとして高単価な案件を獲得したい
レバテックフリーランス
フリーランス案件の単価の高さは圧倒的!!


当ブログ著者
当ブログ著者
忖度は一切なし!
本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!
【RUNTEQの特徴】
✅受講生からの評判が驚くほど良い
✅学習はハードだが未経験とは思えないほど高いスキルが身に付く
挫折させない万全なサポート体制が用意されている
✅採用面接で担当者に刺さるレベルの高い「ポートフォリオ」を作成できる
✅給付金を使えば実質約13万円という格安料金で受講できる

\ もちろん勧誘行為は一切なし! 相談だけでもOK! /