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

yipeiwu_com6年前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'

相关文章

PHP使用curl_multi实现并发请求的方法示例

本文实例讲述了PHP使用curl_multi实现并发请求的方法。分享给大家供大家参考,具体如下: class CurlMultiUtil { /** * 根据url,post...

PHP 中关于ord($str)&amp;gt;0x80的详细说明

GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示" 注:括号里面都是2进制 当你发现一个字节的内容大...

php递归删除目录与文件的方法

本文实例讲述了php递归删除目录与文件的方法。分享给大家供大家参考。具体实现方法如下: <?php function deldir($path){ $dh = ope...

几种有用的变型 PHP中循环语句的用法介绍

PHP手册中对它的语法定义如下:   for (expr1; expr2; expr3)   statement   下面说说for语句几种有用的变型。   1、无限循环   首先是人尽...

PHP获取文件相对路径的方法

本文实例讲述了PHP获取文件相对路径的方法。分享给大家供大家参考。具体实现方法如下: <?php $a = '/a/b/c/d/e.php'; $b = '/a/b/1...