将于今年 11 月发布的 PHP 7 将引入 Spaceship (<=>) 运算符。它是什么以及它是如何工作的?
这个问题在我们关于 PHP 操作符的一般参考问题中已经有了答案。
将于今年 11 月发布的 PHP 7 将引入 Spaceship (<=>) 运算符。它是什么以及它是如何工作的?
这个问题在我们关于 PHP 操作符的一般参考问题中已经有了答案。
( <=>
"Spaceship") 运算符将提供组合比较,因为它将:
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
组合比较运算符使用的规则与 PHP viz 当前使用的比较运算符相同。<
, <=
,和. ==
_ 具有 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
根据引入 operator 的 RFC,$a <=> $b
计算结果为:
$a == $b
$a < $b
$a > $b
在我尝试过的每种情况下,实践中似乎都是这种情况,尽管严格来说,官方文档只提供了稍微弱一点的保证$a <=> $b
会返回
$a
当分别小于、等于或大于时,小于、等于或大于零的整数$b
无论如何,您为什么需要这样的运营商?再一次,RFC 解决了这个问题——它几乎完全是为了更方便地为usort
(以及类似的uasort
and 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'];
});
更多使用 spaceship 运算符编写的比较函数示例可以在 RFC 的有用性部分中找到。
它是用于组合比较的新运算符。在行为上类似于strcmp()
or version_compare(),但它可以用于所有具有与<
, <=
, ==
, >=
,相同语义的通用 PHP 值>
。0
如果两个操作数相等,1
左边更大,右边更大,则返回-1
。它使用与我们现有的比较运算符完全相同的比较规则:<
、、、和。<=
==
>=
>