strcmp() 和 Spaceship Operator (<=>) 有啥区别

Posted

技术标签:

【中文标题】strcmp() 和 Spaceship Operator (<=>) 有啥区别【英文标题】:What is the difference between strcmp() and Spaceship Operator (<=>)strcmp() 和 Spaceship Operator (<=>) 有什么区别 【发布时间】:2016-09-07 04:16:50 【问题描述】:

PHP 7 中,我们有一个新的运算符,宇宙飞船运算符&lt;=&gt;,我发现它与strcmp() 非常相似(如果不相同)。

它们之间有什么区别吗?

编辑:我问他们两者之间的区别,没有提到What is <=> (the 'Spaceship' Operator) in php 7?或What is <=> (the 'Spaceship' Operator) in PHP 7?

【问题讨论】:

What is <=> (the 'Spaceship' Operator) in PHP 7?的可能重复 来自RFCSimilar to strcmp() or version_compare() in behavior, but it can be used on all generic PHP values with the same semantics as &lt;, &lt;=, ==, &gt;=, &gt;. @MarcosPérezGude 我看到了那个,但没有回答我的问题。我的问题是有什么区别,我没有看到任何参考。 strcmp 比较字符串,&lt;=&gt; 比较不同的数据类型。 好的,抱歉,我撤回投票 【参考方案1】:

strcmp - 它是“二进制安全”字符串比较的函数

如果左侧较小,则宇宙飞船运算符 () 返回 -1,如果值相等,则返回 0,如果左侧较大,则返回 1。它可以用于所有具有与 =、> 相同语义的通用 PHP 值。此运算符的行为类似于 strcmp() 或 version_compare()。该运算符可用于整数、浮点数、字符串、数组、对象等。

例如你可以比较arraysobjects,通过float你会得到不同的结果:

$var1 = 1.3;
$var2 = 3.2;
var_dump($var1 <=> $var2); // int(-1)
var_dump(strcmp($var1, $var2)); // int(-2)

还有其他区别……

More example this

【讨论】:

很好的答案,我之前没有测试过【参考方案2】:

根据官方文档:

"" 返回“小于、等于或大于零的整数”,而“strcmp”返回“0”,因此您可能找不到任何区别。

通常,这已经足够了,因为我们不关心返回的确切值,但是,如下所示:

回声 5 1; // 1 回声 strcmp(5,1); // 4

我永远无法从宇宙飞船中获得除 1,0,-1 以外的值。

【讨论】:

以上是关于strcmp() 和 Spaceship Operator (<=>) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Spaceship::UnexpectedResponse: [!] Missing required information to submit for external testing - Mis

E. Spaceship Solitaire

OpenGL Spaceship 推进器在底部不是圆形的

strcmp和strncmp

strcmp和strncmp

strcmp和strncmp