PHP三元运算符的结合性介绍


Posted in PHP onJanuary 10, 2012

先看一个三元运算式子:

<?php 
$a=1;$b=2;$c=3;$d=4; 
echo $a<$b?'xx':$a<$c?'yy':$a<$d?'zz':'oo'; 
?>

一般按照其它语言(比如C或Java)的规则, 以上代码的运算逻辑是:
$a<$b => true => 'xx' ==> 结束

那么最后得到的结果就是'xx', 而再往后的运算都会被无视.
然而令人吃惊的是, php运算以上代码最后得到的结果却是'zz'...我擦, 什么情况, 这不坑爹么...
老规矩, 只好求教谷歌酱, 结果被告知php的三元运算竟然是向左结合的...于是豁然开窍.
我给上面的代码加上两个括号:
<?php 
$a=1;$b=2;$c=3;$d=4; 
echo (($a<$b?'xx':$a<$c)?'yy':$a<$d)?'zz':'oo'; 
?>

一目了然了吧, 这才是php的运算逻辑:
$a<$b => true => 'xx' => true => 'yy' => true => 'zz' => 结束

这其中涉及到两个类型转化的过程, 即 'xx' => true 和 'xx' => true.
不知这样的过程是否是蛋疼, 确实是让人很难理解...
最后再次回到上面的代码, 将其变为像C一样的向右结合吧:
<?php 
$a=1;$b=2;$c=3;$d=4; 
echo $a<$b?'xx':($a<$c?'yy':($a<$d?'zz':'oo')); 
// 括号换下位置就行了, php里括号省不得 
?>
PHP 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
PHP数据缓存技术
Feb 14 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
PHP中PDO的错误处理
Sep 04 PHP
基于php缓存的详解
May 15 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 #PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 #PHP
PHP的SQL注入过程分析
Jan 06 #PHP
超级实用的7个PHP代码片段分享
Jan 05 #PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 #PHP
选择PHP作为网站开发语言的原因分享
Jan 03 #PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 #PHP
You might like
PHP 采集心得技巧
2009/05/15 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
Python深入学习之装饰器
2014/08/31 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
WSDL的操作类型主要有几种
2013/07/19 面试题
前台接待岗位职责
2015/02/03 职场文书
青岛海底世界导游词
2015/02/11 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
MySQL 原理与优化之Update 优化
2022/08/14 MySQL