PHP7で追加されたスペースシップ演算子(<=>)について
PHPのコードレビューをしていたら見慣れない演算子 <=>
を発見!
なんやこれと思ったら、PHP7で追加された スペースシップ演算子(spaceship operator)
という比較演算子でした。
スペースシップ演算子は左辺と右辺を比較した結果として、-1, 0, 1
のいずれかを返します。
- 左辺より右辺が大きければ
-1
を返す。 - 左辺の右辺が同じなら
0
を返す。 - 左辺の方が右辺より
1
を返す。
PHPのインタラクティブモードで実際に返却される値を確認する。
$ php -a Interactive shell php > // 数値比較 php > echo 0 <=> 1; -1 php > echo 1 <=> 1; 0 php > echo 1 <=> 0; 1 php > // trueとfalse比較(trueは1, falseは'') php > echo false <=> true; -1 php > echo true <=> true; 0 php > echo true <=> false; 1 php > // 文字列比較(アルファベット順) php > echo 'a' <=> 'b'; -1 php > echo 'a' <=> 'a'; 0 php > echo 'b' <=> 'a'; 1
どうやらソートする際によく使われる様子。
- 今までの書き方
<?php $numbers = [5, 1, 3, 2, 4]; usort($numbers, function($a, $b) { if ($a < $b) { return -1; } elseif ($a == $b) { return 0; } else if ($a > $b) { return 1; } }); print_r($numbers);
- スペースシップ演算子を使った場合
<?php $numbers = [5, 1, 3, 2, 4]; usort($numbers, function($a, $b) { return $a <=> $b; }); print_r($numbers);
スペースシップ演算子自体はPerlやRubyなどの他の言語にもあるみたいですね。他の言語もやらないと…