PHPの「??」(Null合体演算子)と「?:」(エルビス演算子)の違い

PHP7系から導入されたNull合体演算子と、エルビス演算子の使い分けする方法について解説していきます。

比較コード

実際の違いについて、まずは実行コードで見ていきましょう。

// null比較
null ?? "Default"; // "Default"
null ?: "Default"; // "Default"

// 空文字比較
"" ?? "Default"; // ""
"" ?: "Default"; // "Default"

// 0比較
0 ?? "Default"; // 0
0 ?: "Default"; // "Default"

// "0"比較
"0" ?? "Default"; // "0"
"0" ?: "Default"; // "Default"

// 空配列比較
[] ?? "Default"; // []
[] ?: "Default"; // "Default"

// false比較
false ?? "Default"; // false
false ?: "Default"; // "Default"

Null合体演算子( ?? )では null のみが右辺の “Default” が出力されて、エルビス演算子( ?: )ではPHP言語でのfalseに相当するものは全て “Default” が表示されます。

Null合体演算子とは

PHPの Null 合体演算子は、変数が null でなければその値を、そうでなければ指定されたデフォルト値を返すための演算子です

前述のコードの通り、Nullだけを判別するので PHP言語でのfalse相当の値では機能しないことがわかります。

PHP7.0以降で使用することができます。

エルビス演算子とは

三項演算子の比較部分をそのまま返却する演算子です。

通常の三項演算子では返却値を都度指定する必要がありますが、エルビス演算子では比較された値が真に判定されると比較値が返却されます。

$value = 1;

// 三項演算子
$value ? $value : "Default"; // 1

// エルビス演算子
$value ?: "Default"; // 1

最後に

以上、Null合体演算子とエルビス演算子の挙動の違いについて解説しました。

そもそもが演算子としての機能としては理解していたのですが、Null合体演算子と呼ばれる事を知って興味が出てまとめてみました。

この情報が何かの参考になりましたら幸いです。