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获取iframe里的值示例代码
Jun 24 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
JS仿hao123导航页面图片轮播效果
Sep 01 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
Mar 02 Javascript
JS代码触发事件代码实例
Jan 02 Javascript
js 图片懒加载的实现
Oct 21 Javascript
js实现简易计算器小功能
Nov 18 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 Javascript
关于Javascript闭包与应用的详解
Apr 22 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获取bing每日壁纸示例分享
2014/02/25 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
python pdb调试方法分享
2014/01/21 Python
python 中的int()函数怎么用
2017/10/17 Python
Python遍历numpy数组的实例
2018/04/04 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
幼儿园课题实施方案
2014/05/14 职场文书
毕业生求职信范文
2014/06/29 职场文书
教师党员整改措施
2014/10/24 职场文书
法定代表人免职证明
2015/06/24 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
Redis 限流器
2022/05/15 Redis
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技