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 相关文章推荐
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
Jun 27 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
May 28 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
Dec 13 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
Feb 27 Javascript
微信小程序之绑定点击事件实例详解
Jul 07 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
javascript事件监听与事件委托实例详解
Aug 16 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
js实现无限层级树形数据结构(创新算法)
Feb 27 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
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
Js 中debug方式
2010/02/07 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
python获取指定网页上所有超链接的方法
2015/04/04 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python绘图方法实例入门
2015/05/19 Python
Python 基础知识之字符串处理
2017/01/06 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python pygame实现方向键控制小球
2019/05/17 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
《分一分》教学反思
2014/04/13 职场文书
法人委托书范本
2014/09/15 职场文书
早上好问候语大全
2015/11/10 职场文书
PHP解决高并发问题
2021/04/01 PHP
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Redis Stream类型的使用详解
2021/11/11 Redis
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫