[PHP] PHPの変な演算子

2018年1月15日月曜日

PHP

変な演算子たち

PHPではNull合体演算子、宇宙船演算子という変な演算子がある。

Null合体演算子は比較対象がNULLであれば指定した値を返し、非NULLであればその値をそのまま返してくれる。
宇宙船演算子はCのstrcmpみたいなもので、二値を比較して、等しければ0、右の値が大きければ1、左の値が大きければ-1を返してくれる。
// Null合体演算子
$foo ?? 'nothing';
// 宇宙船演算子
$a <=> $b;

※Null合体演算子、宇宙船演算子ともにPHP7からの機能。
PHPマニュアル 新機能

エルビス演算子

もう一つ見慣れない演算子として、エルビス演算子がある。
これは1つ目の項を評価した結果がTRUEであれば、1つ目の項の値をそのまま返し、そうでなければ2つ目の項の値を返してくれる。
// エルビス演算子
$foo ?: 'nothing';
なんでエルビス演算子なのかって言うと、?:がエルビス・プレスリーのリーゼントに見えるからだね。

ところが、このエルビス演算子マニュアルを見ても載っていない。
PHPマニュアル 比較演算子

これはエルビス演算子っていう独立した演算子があるわけではなく、他のプログラミング言語でもよくある三項演算子の省略形だからだ。
通常、三項演算子はこんな感じになる。
$a ? $b : $c;
でも、PHPでは上の式の$bの項を省略できる。この場合は$bではなく、$aの値がそのまま返ってくるというわけだ。
これは便利ではあるけれど、PHPの各型でどのような値がTRUE/FALSEと評価されるのか知っておく必要があるね!