PHP 7 中的 <=> (“宇宙飞船”运算符)是啥? [复制]
Posted
技术标签:
【中文标题】PHP 7 中的 <=> (“宇宙飞船”运算符)是啥? [复制]【英文标题】:What is <=> (the 'Spaceship' Operator) in PHP 7? [duplicate]PHP 7 中的 <=> (“宇宙飞船”运算符)是什么? [复制] 【发布时间】:2015-08-02 15:01:12 【问题描述】:将于今年 11 月发布的 php 7 将引入 Spaceship () 运算符。它是什么以及它是如何工作的?
这个问题在我们关于 PHP 操作符的一般参考问题中已经有an answer。
【问题讨论】:
当前 PHP 版本是 PHP 5.x,PHP 7 可能是草稿,未来可以多次更改。 crazyengineers.com/threads/… wiki.php.net/rfc/combined-comparison-operator @panther PHP 7 是真实的,第一个候选版本将在几周内到期 - 尽管是否能满足该时间表还有待观察。可以看到计划的时间线here @pala_,要 google 一些东西,Google 必须首先“google it”并在某处找到“答案”。我用谷歌搜索并找到了这个页面,我对发布的这个问题没有意见。 【参考方案1】:<=>
(“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
【讨论】:
但是字符串是如何比较的呢?它是否在查看字符、字符串中的字符数等等? @AltafHussain 看到这个答案:(***.com/a/17371819/4337069) 主要用于排序和组合比较。【参考方案2】:根据the RFC that introduced the operator,$a <=> $b
的计算结果为:
$a == $b
-1 如果$a < $b
1 如果$a > $b
在我尝试过的每种情况下,实践中似乎都是这种情况,尽管严格来说,official docs 仅提供稍弱的保证$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'];
);
更多使用 spaceship 运算符编写的比较函数示例可以在 RFC 的 Usefulness 部分找到。
【讨论】:
对我来说,问题“是什么”不仅仅是“它有什么作用”,还有“它有什么用,在哪里可以看到”,因此我认为这是 正确而完整的答案:)【参考方案3】:它是一个用于组合比较的新运算符。在行为上类似于 strcmp()
或 version_compare(),但它可以用于与 <
、<=
、==
、>=
、>
具有相同语义的所有通用 PHP 值。如果两个操作数相等,则返回0
,如果左侧更大,则返回1
,如果右侧更大,则返回-1
。它使用与我们现有的比较运算符完全相同的比较规则:<
、<=
、==
、>=
和 >
。
click here to know more
【讨论】:
Spaceship Operator 用于比较两个表达式。当第一个表达式分别小于、等于或大于第二个表达式时,它返回 -1、0 或 1。 nexladder.com/php7-tutorial/php7-spaceship-operator以上是关于PHP 7 中的 <=> (“宇宙飞船”运算符)是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章