了解嵌套的 PHP 三元运算符
2022-08-30 20:38:19
我不明白输出(“”)是如何产生的?four
$a = 2;
echo
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 5 ? 'four' :
'other'
;
// prints 'four'
我不明白为什么“”会被打印出来。four
我不明白输出(“”)是如何产生的?four
$a = 2;
echo
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 5 ? 'four' :
'other'
;
// prints 'four'
我不明白为什么“”会被打印出来。four
您需要将三元条件括起来:
<?php
for ($a=0; $a < 7; $a++) {
echo (
$a == 1 ? 'one' :
($a == 2 ? 'two' :
($a == 3 ? 'three' :
($a == 5 ? 'four' : 'other'))));
echo "\n";
// prints 'four'
}
exit;
?>
返回:
other
one
two
three
other
four
other
如您所料。
请参阅 PHP 三元运算符帮助中“三元运算符”底部的注释。
正在从左到右计算表达式。所以你实际上得到了:
echo (
((($a == 1 ? 'one' : $a == 2)
? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
所以对于 ,你会得到:$a=2
echo (
((($a==2) ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
然后
echo (
((true ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
然后
echo (
('two' ? 'three' : $a == 5) ? 'four' : 'other');
然后
echo (
'three' ? 'four' : 'other');
等等。echo 'four'
请记住,PHP 是动态类型的,并将任何非零非空值视为 TRUE。
在PHP手册的比较运算符页面上,他们解释说PHP在嵌套(堆叠)三元运算符时的行为是“不明显的”。
您编写的代码如下所示:
$a = 2;
echo
((($a == 1 ? 'one' :
$a == 2) ? 'two' :
$a == 3) ? 'three' :
$a == 5) ? 'four' :
'other'
;
// prints 'four'
就像2一样,两者都是TRUE,你得到“”作为结果,因为你不再比较是否为真。$a
'two'
'three'
four
'four'
如果你想改变这一点,你必须把括号放在不同的地方[也注明:BeingSimpler和MGwynne]:
$a = 2;
echo
($a == 1 ? 'one' :
($a == 2 ? 'two' :
($a == 3 ? 'three' :
($a == 5 ? 'four' :
'other'))))
;
// prints 'two'