Cyb*_*rix 15 php ternary-operator
我使用三元运算符很多,但我似乎无法将多个三元运算符堆叠在一起.
我知道堆叠多个三元运算符会使代码的可读性降低,但在某些情况下我想这样做.
这是我到目前为止所尝试的:
$foo = 1;
$bar = ( $foo == 1 ) ? "1" : ( $foo == 2 ) ? "2" : "other";
echo $bar; // display 2 instead of 1
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
Bra*_*ley 29
那些括号是我认为给你的.
尝试
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
Run Code Online (Sandbox Code Playgroud)
Kon*_*lph 18
问题是PHP 与所有其他语言不同,它使条件运算符保持关联.这会打破你的代码 - 这在其他语言中会很好.
你需要使用括号:
$bar = $foo == 1 ? "1" : ($foo == 2 ? "2" : "other");
Run Code Online (Sandbox Code Playgroud)
(请注意,我已从代码中删除了其他括号;但这些是正确的,只是多余的.)
你需要周围的一些括号右侧的操作数:
$foo = 1;
$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");
echo $bar;
Run Code Online (Sandbox Code Playgroud)
PHP的解释器坏了,处理你的行:
$bar = ( $foo == 1 ) ? "1" : ( $foo == 2 ) ? "2" : "other";
Run Code Online (Sandbox Code Playgroud)
如
$bar = (( $foo == 1) ? "1" : ( $foo == 2)) ? "2" : "other";
Run Code Online (Sandbox Code Playgroud)
由于左手表达式的计算结果为"true",因此返回剩余三元运算符("2")的第一个操作数.
在每个内部三元运算符两边加上括号,这样可以保证运算符的优先级:
$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15461 次 |
| 最近记录: |