PHP 7引入了太空船(<=>)运算符,它是什么以及如何使用?
PHP 7引入了太空船(<=>)运算符,它是什么以及如何使用?
<=>
"("太空船")运算符将提供组合比较,它将:Return 0 if values on either side are equal
Return 1 if the value on the left is greater
Return -1 if the value on the right is greater
<
、<=
、==
、>=
和>
。那些有Perl或Ruby编程背景的人可能已经对这个为PHP7提出的新运算符很熟悉了。 //Comparing Integers
echo 1 <=> 1; //output 0
echo 3 <=> 4; //output -1
echo 4 <=> 3; //output 1
//String Comparison
echo "x" <=> "x"; //output 0
echo "x" <=> "y"; //output -1
echo "y" <=> "x"; //output 1
$a <=> $b
的计算结果如下:
$a == $b
,则为0$a < $b
,则为-1$a > $b
,则为1$a <=> $b
将返回
当
$a
分别小于、等于或大于$b
时,返回小于零、等于零或大于零的整数
无论如何,为什么你想要这样的运算符呢?RFC解释了这个问题 - 它基本上完全是为了使编写usort
(以及类似的uasort
和uksort
)比较函数更加方便。
usort
将一个数组作为第一个参数进行排序,并将用户定义的比较函数作为其第二个参数。它使用该比较函数来确定数组中一对元素中哪个更大。比较函数需要返回:
如果第一个参数被认为小于、等于或大于第二个参数,则分别返回小于零、等于零或大于零的整数。
太空船运算符使得这变得简洁而方便:
$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'];
});
strcmp()
或version_compare()类似,但它可以用于所有通用PHP值,并具有与<
、<=
、==
、>=
和>
相同的语义。如果两个操作数相等,则返回0
,如果左侧大,则返回1
,如果右侧大,则返回-1
。它使用与我们现有的比较运算符完全相同的比较规则:<
、<=
、==
、>=
和>
。