【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