这个问题有点先发制人,因为 php 7 还没有发布。我很好奇在三元运算符的上下文中如何处理宇宙飞船运算符。
所以如果我有一个前宇宙飞船三元表达式,例如:
$foo = 1;
$bar = 0;
echo 'foo is ' . ( ($foo > $bar) ? 'greater than' : ( ($foo < $bar ) ? 'less than' : 'equal to' ) ) . ' bar.';
使用比较运算符的等效三元运算符是什么?三元组是否有一些方法来处理这种情况?我经常使用三元运算符,并且很好奇是否有某种方法可以在比较运算符相关的各种情况下简化代码。
这是使用 spaceship 运算符
<=>
作为穷人的三向“三元”的巧妙方法,还使用箭头函数和数组解构。
<?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.
但是请注意:它是聪明的,并且聪明的代码总是需要更多的脑力来理解,这使得它更难维护。所以有警告。
随着 PHP 8 中引入 match 语句,现在这成为可能:
$foo = 0;
$bar = 1;
echo match ($foo <=> $bar) {
-1 => 'foo is less than bar',
1 => 'foo is greater than bar',
default => 'foo and bar are equal'
};
最后一行:
default => 'foo and bar are equal'
也可以是:
0 => 'foo and bar are equal'
因为宇宙飞船运算符将始终只返回这三个值。