php中的三元运算符使用说明


  本文标签:三元

今天一个网友在群里发了个题目不难,但是可能会错
复制代码 代码如下:

echo
$a == 1 ? one :
$a == 2 ? two :
$a == 3 ? three :
$a == 4 ? foura : other;
echo "\n";

输出结果是:

<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