今天一个网友在群里发了个题目不难,但是可能会错
复制代码 代码如下:
echo
$a == 1 ? "one" :
$a == 2 ? "two" :
$a == 3 ? "three" :
$a == 4 ? "foura" : "other";
echo "";
输出结果是: <BR> 结果是:four 一开始想不明白,按照我的理解,应该是这样的逻辑:
echo ($a == 1 ? "one" :
( $a == 2 ? "two" :
( $a == 3 ? "three" :
($a == 4 ? "four" : "other"))));
输出为:two 后来在kevinG(qq:48474)的指教下,参看php手册,终于明白了php的三元符的解释是从左到右的,
<!--?php
// 乍看起来下面的输出是 "true"
echo (true?"true":false?"t":"f"); // 然而,上面语句的实际输出是"t",因为三元运算符是从左往右计算的 // 下面是与上面等价的语句,但更清晰
echo ((true ? "true" : "false") ? "t" : "f"); 所以上面的可以这样解释:
echo (
((($a == 1 ? "one" :
$a == 2) ? "two" :
$a == 3 )? "three" :
$a == 4 )? "four" : "other"); 其实这个涉及到类型转换:
$a==1=>false=>$a==2?true=>"two"=true=>"three"=true=>"four"