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


Posted in PHP onJuly 03, 2011

今天一个网友在群里发了个题目不难,但是可能会错

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 相关文章推荐
PHP新手上路(九)
Oct 09 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
解析php时间戳与日期的转换
Jun 06 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php支持中文字符串分割的函数
May 28 PHP
php+ajax注册实时验证功能
Jul 20 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
PHP加MySQL消息队列深入理解
Feb 27 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 #PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 #PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 #PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 #PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 #PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 #PHP
php编程实现获取excel文档内容的代码实例
Jun 28 #PHP
You might like
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php学习笔记之基础知识
2014/11/08 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
js loading加载效果实现代码
2009/11/24 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
公关关系专员的自我评价分享
2013/11/20 职场文书
简历中个人求职的自我评价模板
2013/11/29 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书