首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较运算符(宇宙飞船运算符)在三值运算符中将如何处理?

比较运算符(宇宙飞船运算符)在三值运算符中将如何处理?
EN

Stack Overflow用户
提问于 2015-04-05 19:26:53
回答 2查看 1.1K关注 0票数 4

这个问题有点先发制人,因为php 7还没有发布。我很好奇在三值运算符的上下文中如何处理宇宙飞船操作符。

因此,如果我有一个前宇宙飞船三元表达,如:

代码语言:javascript
复制
$foo = 1;
$bar = 0;
echo 'foo is ' . ( ($foo > $bar) ? 'greater than' : ( ($foo < $bar ) ? 'less than' : 'equal to' ) ) . ' bar.';

使用比较运算符的等效三值运算符是什么?三元组会有一些方法来处理这种情况吗?我经常使用三元操作符,我很好奇,在各种情况下,如果比较运算符是相关的,是否有某种方法来简化代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 16:36:53

正如您从RFC的文档中可以看到的那样,宇宙飞船操作符虽然主要用于处理订单问题。

我认为这对缩短您发布的代码没有帮助,主要是因为三值运算符期望一个布尔值,而三元运算符在两种情况下都会返回一个“真”值(1和-1),而这两种情况下的值是不同的。换句话说,当您将返回值转换为布尔值时,宇宙飞船运算符等效于!=运算符。

不管怎样,你可以在3v4l.org上做实验,就像我做这里一样

票数 3
EN

Stack Overflow用户

发布于 2021-11-19 20:03:49

这里有一种聪明的方法,可以使用太空船运算符 <=>作为穷人的三向“三元”,还可以使用箭头函数和数组破坏。

代码语言:javascript
复制
<?php
$relation = fn($a, $b) => [
    -1 => 'less than',
     0 => 'the same as',
     1 => 'greater than'
][$a <=> $b];

$bar = 2;

// loop $foo from 1 through 3
foreach (range(1,3) as $foo) {
  echo "foo is " . $relation($foo, $bar) . " bar.\n";
}
?>

输出:

代码语言:javascript
复制
foo is less than bar.
foo is the same as bar.
foo is greater than bar.

但是要小心:它很聪明,聪明的代码总是需要更多的脑力来理解,这使得它的可维护性降低。所以有个警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29461307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档