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 相关文章推荐
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js+canvas绘制矩形的方法
Jan 28 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
package.json文件配置详解
Jun 15 Javascript
从零开始学习搭建React脚手架项目
Aug 23 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
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
德生S2000电路分析
2021/03/02 无线电
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
angular.element方法汇总
2015/01/07 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
Python星号*与**用法分析
2018/02/02 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
python安装pil库方法及代码
2019/06/25 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
python模拟斗地主发牌
2020/04/22 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
亿企通软件测试面试题
2012/04/10 面试题
高校自主招生自荐信
2013/12/09 职场文书
销售找工作求职信
2013/12/20 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python