Jim*_*mit 17 php ternary-operator operator-precedence
我不明白输出(" four")是怎么来的?
$a = 2;
echo
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 5 ? 'four' :
'other'
;
// prints 'four'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么" four"被打印出来.
MGw*_*nne 28
您需要包含三元条件:
<?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;
?>
Run Code Online (Sandbox Code Playgroud)
收益:
other
one
two
three
other
four
other
Run Code Online (Sandbox Code Playgroud)
正如你所期望的那样.
请参阅PHP Ternary操作员帮助中"三元运算符"底部的注释.
表达式从左到右进行评估.所以你实际上得到了:
echo (
((($a == 1 ? 'one' : $a == 2)
? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
Run Code Online (Sandbox Code Playgroud)
所以$a=2,你得到:
echo (
((($a==2) ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
Run Code Online (Sandbox Code Playgroud)
然后
echo (
((true ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
Run Code Online (Sandbox Code Playgroud)
然后
echo (
('two' ? 'three' : $a == 5) ? 'four' : 'other');
Run Code Online (Sandbox Code Playgroud)
然后
echo (
'three' ? 'four' : 'other');
Run Code Online (Sandbox Code Playgroud)
等等echo 'four'.
请记住,PHP是动态类型的,并将任何非零非空值视为TRUE.
在该比较运算符 PHP手册页面,他们解释说,PHP的行为是"非显而易见的"嵌套(堆积)三元运营商时.
你写的代码是这样的:
$a = 2;
echo
((($a == 1 ? 'one' :
$a == 2) ? 'two' :
$a == 3) ? 'three' :
$a == 5) ? 'four' :
'other'
;
// prints 'four'
Run Code Online (Sandbox Code Playgroud)
由于$a是2和两个'two'和'three'是也是如此,你会得到" four"作为结果,如果你没有任何比较长'four'是真还是假.
如果你想改变它,你必须把括号放在不同的地方[也注意:BeingSimpler和MGwynne]:
$a = 2;
echo
($a == 1 ? 'one' :
($a == 2 ? 'two' :
($a == 3 ? 'three' :
($a == 5 ? 'four' :
'other'))))
;
// prints 'two'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4073 次 |
| 最近记录: |