我使用三元运算符很多,但我似乎无法将多个三元运算符堆叠在一起。如何在PHP中连接多个三元运算符?
我知道,堆叠多个三元运算符将使代码更不可读但在某些情况下,我会 喜欢做到这一点。
这是我到目前为止已经试过:
$foo = 1;
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
echo $bar; // display 2 instead of 1
什么是正确的语法?各地各内三元操作
我使用三元运算符很多,但我似乎无法将多个三元运算符堆叠在一起。如何在PHP中连接多个三元运算符?
我知道,堆叠多个三元运算符将使代码更不可读但在某些情况下,我会 喜欢做到这一点。
这是我到目前为止已经试过:
$foo = 1;
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
echo $bar; // display 2 instead of 1
什么是正确的语法?各地各内三元操作
这些括号是什么,我认为是让你。
尝试
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
认沽括号,这样操作者优先保证:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
添加括号:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
你可以正确因此这样写:
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
(即:简单地嵌入在括号中的 '内部' 三元运算符)
但是,我真的会真的不想做这件事,因为它的可读性非常可疑,而且已经被严重污染了 - 从来没有任何理由混淆代码,并且与此相关。
问题是,与所有其他语言不同,PHP 使条件运算符左关联。这会破坏你的代码 - 这在其他语言中会很好。
你需要使用括号:
$bar = $foo == 1 ? "1" : ($foo == 2 ? "2" : "other");
(请注意,我已经移除代码其它括号,但这些都是正确的,只是冗余)
“_Notice我已经从你的代码中删除了其他括号;但是这些都是正确的,只是冗余_” - 但是用这样的解析器,你永远无法确定... ;-) – Alnitak 2011-06-01 15:06:43
你需要周围的一些括号右手操作:
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
PHP解释器坏了,处理您行:
$bar = ($foo == 1) ? "1" : ($foo == 2) ? "2" : "other";
作为
$bar = (($foo == 1) ? "1" : ($foo == 2)) ? "2" : "other";
并自该左手表达式评估为“真”的剩余三元运算符的第一操作数(“2”)代替返回。
刚堆起来的括号,你知道了:
$bar = ($foo==1? "1" : ($foo==2? "2" : "other"));
顺便说一句,如果你有很多条款,你应该考虑使用switch
:
switch ($bar) {
case 1: echo "1";
case 2: echo "2";
default: echo "other";
}
如果开关变长,可以将其封装在一个函数中。
$foo = 1;
$bar = ($foo == 1) ? "1" : (($foo == 2) ? "2" : "other");
echo $bar;
只需使用额外的(),它会工作的
可能重复[嵌套PHP三元麻烦:三元输出=如果 - 否则(http://stackoverflow.com/questions/4807454/nested -php-ternary-trouble-ternary-output-if-else) – 2011-06-01 15:05:23
大家都很好回答。 – Cybrix 2011-06-01 15:22:49