【PHP】三項演算子とエルビス演算子とNull合体演算子

エルビス演算子とNull合体演算子がたまにごちゃっとなるので。
三項演算子はついで。

三項演算子

<?php
$list = ['a', 'b', 'c'];
echo count($list) === 3 ? 'foo' : 'bar'; // foo
echo count($list) !== 3 ? 'foo' : 'bar'; // bar

(expr1) ? (expr2) : (expr3) でexpr1が true ならexpr2、 false ならexpr3と評価される。
基本。

エルビス演算子

<?php
echo 'hoge' ?: 'fuga'; // hoge
echo '0' ?: '1'; // 1

(expr1) ?: (expr2) でexpr1が trueと同等 ならexpr1、それ以外ならexpr2と評価される。
PHP5.3から使用可能。
公式ドキュメント(日本語)にはエルビス演算子っていう名前はなくて、三項演算子として載っている。
まぁでも大体エルビス演算子って言われる。
形がエルビス・プレスリーに似ているからエルビス演算子っていう。らしい。

Null合体演算子

<?php
echo '0' ?? '1'; // 0
echo null ?? '1'; // 1

(expr1) ?? (expr2) でexpr1が NULL ならexpr2、それ以外ならexpr1と評価される。
PHP7系から使用可能。
この演算子の良いところはexpr1が存在しない値でも notice が発生しないこと。

以下のコードでは $foo が存在しない変数にも関わらず、Null合体演算子はnoticeが発生しない。
一方で、エルビス演算子三項演算子)はnoticeが発生してしまう。

<?php
echo $foo ?? 'bar'; // bar
echo $foo ?: 'bar'; // Notice: Undefined variable

公式にもあるとおり、これは配列のキーが存在するかどうかを判別するときに便利。

<?php
$list = ['a' => 1, 'b' => 2, 'c' => 3];
echo $list['b'] ?? '99'; // 2 
echo $list['z'] ?? '99'; // 99

PHP: 比較演算子 - Manual