今年11月に登場する予定のPHP 7では、Spaceship(<=>)演算子が導入されます。それは何ですか、そしてそれはどのように機能しますか?
この質問はすでにPHP演算子についての一般的な参照質問に 回答 を持っています。
この<=>
演算子は、以下の点で組み合わせ比較を提供します。
Return 0 if values on either side are equal
Return 1 if value on the left is greater
Return -1 if the value on the right is greater
組み合わせ比較演算子で使用される規則は、PHP vizで現在使用されている比較演算子と同じです。 <
、<=
、==
、>=
および>
。 PerlまたはRubyプログラミングのバックグラウンドを持っている人は、PHP7用に提案されたこの新しい演算子に既に精通しているかもしれません。
//Comparing Integers
echo 1 <=> 1; //ouputs 0
echo 3 <=> 4; //outputs -1
echo 4 <=> 3; //outputs 1
//String Comparison
echo "x" <=> "x"; // 0
echo "x" <=> "y"; //-1
echo "y" <=> "x"; //1
演算子を導入したRFC によると、$a <=> $b
は次のように評価されます。
$a == $b
の場合は0$a < $b
$a > $b
の場合1厳密には official docs は$a <=> $b
が返されるというわずかに弱い保証しか提供していませんが、実際に私が試したすべてのシナリオでそうです
$a
がそれぞれ$b
より小さい、等しい、または大きい場合、ゼロより小さい、等しい、または大きい整数
とにかく、なぜあなたはそのような演算子が必要なのでしょうか?繰り返しになりますが、RFCはこれに対処しています- usort
(および同様の uasort
および uksort
の比較関数を記述する方が便利です。 )。
usort
は、配列を最初の引数として並べ替え、ユーザー定義の比較関数を2番目の引数として受け取ります。この比較関数を使用して、配列の要素のペアのどちらが大きいかを判断します。比較関数は以下を返す必要があります。
最初の引数がそれぞれ2番目の引数より小さい、等しい、または大きいと見なされる場合は、ゼロより小さい、等しい、または大きい整数。
宇宙船オペレーターは、この簡潔で便利なものにします:
$things = [
[
'foo' => 5.5,
'bar' => 'abc'
],
[
'foo' => 7.7,
'bar' => 'xyz'
],
[
'foo' => 2.2,
'bar' => 'efg'
]
];
// Sort $things by 'foo' property, ascending
usort($things, function ($a, $b) {
return $a['foo'] <=> $b['foo'];
});
// Sort $things by 'bar' property, descending
usort($things, function ($a, $b) {
return $b['bar'] <=> $a['bar'];
});
宇宙船演算子を使用して記述された比較関数のその他の例は、RFCの 有用性 セクションにあります。
組み合わせ比較のための新しい演算子です。動作はstrcmp()
またはversion_compare()に似ていますが、<
、<=
、==
、>=
、>
と同じ意味を持つすべての総称PHP値に使用できます。両方のオペランドが等しい場合は0
、左が大きい場合は1
、右が大きい場合は-1
を返します。これは、既存の比較演算子<
、<=
、==
、>=
および>
とまったく同じ比較規則を使用します。