php中and 和 &&出坑指南


Posted in Javascript onJuly 13, 2018

我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑!
看以下代码:

$bA = true;
$bB = false;
$b1 = $bA and $bB;
$b2 = $bA && $bB;
var_dump($b1); // $b1 = true
var_dump($b2); // $b2 = false
$bA = false;
$bB = true;
$b3 = $bA or $bB;
$b4 = $bA || $bB;
var_dump($b3); // $b3 = false
var_dump($b4); // $b4 = true

奇怪吧, and/&&和or/||出来的结果竟然不一样的. 问题出在哪里呢?
我们再看一段代码!

$bA = true;
$bB = false;
var_dump($bA and $bB); // false
var_dump($bA && $bB); // false
$bA = false;
$bB = true;
var_dump($bA or $bB); // true
var_dump($bA || $bB); // true

更奇怪, 这时怎么是对的. 所以问题可能出现在=上, 一番google和文档,终于找到了答案!

运算符优先级

通过这个表, 我们可以看到 and/&& 和 or/|| 这两组运算符的优先级竟然是不一样的. and和or的优先级是低于=的, 所以上面的代码就好理解了, 就是先做赋值然后再做了一个and或or的逻辑运算, 这个运算的结果并没有存下来. 所以最后出来让我们匪夷所思的结果.

结合性 运算符 额外信息
无结合性 clone new 克隆和new
[ 数组
** 算术
++ — ~ (int) (float) (string) (array) (object) (bool) @ 类型和自增/自减
无结合性 instanceof 类型
! 逻辑运算
* / % 算术
+ ? . 算术和字符串
> 按位运算
无结合性 >= 比较运算
无结合性 == != === !== 比较运算
& 按位运算和引用
^ 按位运算
| 按位运算
&& 逻辑运算
| | 逻辑运算
?: 三元条件选择
= += -= *= /= .= %= &= = ^= >= => | 赋值
and 逻辑运算
xor 逻辑运算
or 逻辑运算
, 很多使用
Javascript 相关文章推荐
Extjs 几个方法的讨论
Jan 28 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
JS判断字符串变量是否含有某个字串的实现方法
Jun 03 Javascript
angularJs中datatable实现代码
Jun 03 Javascript
jQuery上传插件webupload使用方法
Aug 01 jQuery
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
Feb 06 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
浅谈webpack SplitChunksPlugin实用指南
Sep 17 Javascript
微信小程序模板消息推送的两种实现方式
Aug 27 Javascript
canvas实现贪食蛇的实践
Feb 15 Javascript
vue项目base64字符串转图片的实现代码
Jul 13 #Javascript
angular 组件通信的几种实现方式
Jul 13 #Javascript
JavaScript实现异步图像上传功能
Jul 12 #Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 #Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 #Javascript
详解node.js的http模块实例演示
Jul 12 #Javascript
Vue中使用的EventBus有生命周期
Jul 12 #Javascript
You might like
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
php empty函数 使用说明
2009/08/10 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
Ionic快速安装教程
2016/06/03 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
详解Python文件修改的两种方式
2019/08/22 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
python 异步async库的使用说明
2020/05/04 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
大学生个人实习的自我评价
2014/02/15 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
农行心得体会
2014/09/02 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
幼师大班个人总结
2015/02/13 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
Oracle笔记
2021/04/05 Oracle
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js