NULL合体演算子とエルビス演算子




この記事は最終更新日から2年以上経過しています。

PHP7になってから以下のようなコードを見かけるようになりました。

$a = $a ?? $b;

よくでてくる

$c = 'default';
if (isset($a) {
    $c = $a;
}

みたいなのを

$c = $a ?? 'default';

と簡単にかけるやつですね。
知ってからは結構使うようになったのですが、この演算子に名前があることを最近しりました。
その名前は「NULL合体演算子」。
なんか仰々しい名前ですね(笑)
英語だとどうなのだろうと思って調べてみたら「Null coalescing operator」となってしました。

http://php.net/manual/en/migration70.new-features.php

たしかに翻訳が難しそうな単語なのでちょっと納得でした。

そして、つい最近「?:」という演算子をみかけました。
これは三項演算子のシンタックスシュガーでPHP5.3からあるということがわかりました。
PHP5.3からあるのに知らなかった自分もはずかしい。。
しかも名前までわかったのですが、「エルビス演算子」という「NULL合体演算子」よりもさらに派手なイメージです(笑)
なぜエルビス演算子なのかは気になったので調べたらエルビスプレスリーに似ているからということでした。
エルビス演算子(ウィキペディアより)
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%AB%E3%83%93%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90

「 ?: 」

確かに気持ち似ている気も・・・(笑)

さて、最後に一番重要な例をいくつかのせておきます。
一番の違いですが、NULL合体演算子は宣言されていない変数を使ってもエラーが発生しないことに対し、エルビス演算子は「PHP Notice: Undefined variable」が発生することです(PHP7.2で確認)。

>>> $a = 'a';
=> "a"
>>> $a ?? 'bbb'
=> "a"
>>> $b ?? 'bbb'
=> "bbb"
>>> $a ?: 'bbb'
=> "a"
>>> $b ?: 'bbb'
PHP Notice:  Undefined variable: b in Psy Shell code on line 1