PHP

【PHP】知らなかった比較演算子【null合体演算子】

こんにちは、ともです。

PHPをもう一回勉強してまして、知らない演算子が色々あったのでメモしておきます。

そこで、この記事ではPHPではnull合体演算子、エルビス演算子、『<=>』の演算子についてまとめます。

null合体演算子(??)PHP7から

Manual

null合体演算子という演算子が糖衣構文として追加されました。

$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

issetを利用して上記のようなありがちなコードを書きますよね。

  • nullであれば、nobody
  • nullでなければ、その中身

のような処理です。

この処理をnull合体演算子を利用すると次のようになります。

$username = $_GET['username'] ?? 'nobody';

すっきりと記述することができるようになりました。

??はnullだけを通すフィルターのようなものでしょうか。

  • null合体演算子はissetのありがちなコードの糖衣構文
  • A ?? B のAの存在チェックもしてくれる
  • AがNULLの場合のみBを参照する

エルビス演算子(?:)PHP5.3から

5.3にエルビス演算子というものが存在します。

$a = false;
$a = 0;
$a = null;
$a = '未定義';

echo $a ?: 'PHP<br>'; 
// falsy(null or 0 or undefined or false)の場合は'PHP'を出力する

このような挙動をするようです。

?:はfalsyなものだけを通すフィルターのようなものでしょうか。

エルビスプレスリーに『?:』が似ているからその名前が付いたそうです。確かに似てますね。

宇宙船演算子 <=>

宇宙船みたいだからこの名前が付いたんでしょうね。

大小関係を評価した結果『0, -1, 1』の値が返ってくるようですね。

A <=> B
// Aの方が大きい場合は『1』
// A=Bの場合は『0』
// Aの方が小さい場合は『-1』

数値だけではなく、文字列も同じようです。

<?php
// 整数値
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// 浮動小数点数値
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 文字列
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

まとめ

null合体演算子・エルビス演算子・宇宙船演算子について理解をまとめました。

  • null合体演算子はnullを通すフィルター
  • エルビス演算子はfalsyを通すフィルター
  • 宇宙船演算子は大小を比較した結果を『-1, 0, 1』で評価

新たに知らない演算子を知れて楽しかったですね。

あまり使い慣れていない人もいるのではないでしょうか。頭の片隅にでも置いておきたいですね。