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 相关文章推荐
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
jquery插件ContextMenu设置右键菜单
Mar 13 Javascript
原生JS发送异步数据请求
Jun 08 Javascript
React组件生命周期详解
Jul 03 Javascript
详解性能更优越的小程序图片懒加载方式
Jul 18 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
Aug 24 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
Sep 03 Javascript
javascript创建元素和删除元素实例小结
Jun 19 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
Aug 03 Javascript
Node.js系列之连接DB的方法(3)
Aug 30 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
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
详解vue中axios的封装
2018/07/18 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
Python Requests库基本用法示例
2018/08/20 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
青春寄语大全
2014/04/09 职场文书
商场促销活动总结
2014/07/10 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
Oracle 触发器trigger使用案例
2022/02/24 Oracle
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript