PHPに宇宙船が搭載されていました(宇宙船演算子)

宇宙船

PHP7から宇宙船演算子というものが実装されていました。

PHPマニュアル
https://www.php.net/manual/ja/language.operators.comparison.php

PHP7から実行速度が早くなったぞと喜んでいたオールドタイプですがこの演算子の存在は知らなかった、なんともアンニュイな名前に驚いてしまったのです。一応他の言語でも実装されている演算子のようでした。

Wikipedia
https://ja.wikipedia.org/wiki/%E5%AE%87%E5%AE%99%E8%88%B9%E6%BC%94%E7%AE%97%E5%AD%90

比較演算子なのでどちらかが成立すれば何かが返されるという代物です。

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

なにがおきているのか?

左側が大きければ 1が返される、右側が大きければ-1が返される、同じであれば0が返されるというものでした。

このような3つを条件式を書かなくてすむようになります。

if ($a < $b) {
    return -1;
}
else if ($a > $b) {
    return 1;
}
else {
    return 0;
}

具体的に中身が入っているとこうなります。

<?php
if ( 10 <=> 0 ) {
    echo "aaaa\n";
}

if ( 10 <=> 100 ) {
    echo "bbbb\n";
}

if ( 0 <=> 0 ) {
    echo "cccc\n";
}


if ( 0 ) {
    echo "0\n";
}
if ( -1 ) {
    echo "-1\n";
}
if ( 1 ) {
    echo "1\n";
}

// Output
$ php test.php
aaaa
bbbb
-1
1

一応0,1,-1のときも確認しております。長いことPHPやっていたのですが、以外だったのが1と-1をそのまま入れたときにtrueになったんですね、負の数そのままだとifの中に入らないかと思いこんでいました。