这个问题有点先发制人,因为php 7还没有发布。我很好奇在三值运算符的上下文中如何处理宇宙飞船操作符。
因此,如果我有一个前宇宙飞船三元表达,如:
$foo = 1;
$bar = 0;
echo 'foo is ' . ( ($foo > $bar) ? 'greater than' : ( ($foo < $bar ) ? 'less than' : 'equal to' ) ) . ' bar.';使用比较运算符的等效三值运算符是什么?三元组会有一些方法来处理这种情况吗?我经常使用三元操作符,我很好奇,在各种情况下,如果比较运算符是相关的,是否有某种方法来简化代码。
发布于 2015-04-06 16:36:53
正如您从RFC的文档中可以看到的那样,宇宙飞船操作符虽然主要用于处理订单问题。
我认为这对缩短您发布的代码没有帮助,主要是因为三值运算符期望一个布尔值,而三元运算符在两种情况下都会返回一个“真”值(1和-1),而这两种情况下的值是不同的。换句话说,当您将返回值转换为布尔值时,宇宙飞船运算符等效于!=运算符。
不管怎样,你可以在3v4l.org上做实验,就像我做这里一样
发布于 2021-11-19 20:03:49
这里有一种聪明的方法,可以使用太空船运算符 <=>作为穷人的三向“三元”,还可以使用箭头函数和数组破坏。
<?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";
}
?>输出:
foo is less than bar.
foo is the same as bar.
foo is greater than bar.但是要小心:它很聪明,聪明的代码总是需要更多的脑力来理解,这使得它的可维护性降低。所以有个警告。
https://stackoverflow.com/questions/29461307
复制相似问题