PHP中与and、||与or的区别 | php中and 和 出坑指南
在PHP中,&&与and都表示逻辑与,||与or都表示逻辑或,并且它们都是短路运算符。而它们的区别在于运算的优先级不同。
<?php
$t1=true and false;
$t2=true && false;
var_dump($t1,$t2);
?>
在上面的代码中$t1的值为true,$t2的值为false。因为运算符and、=、&&的优先级为&&>=>and,所以在执行第一行时,会先将true赋值给t1,false被忽略。而第二行代码会先进行&&运算,然后将运算的结果false,赋值给t2。
同样对于||和or。运算符or、=、||的优先级为||>=>or。下面代码运行后,$t1的值为false,$2的值为true。
<?php
$t1=false or true;
$t2=false || true;
var_dump($t1,$t2);
?>
-----------------------------------------------------------------------------------------------------------------------------------------------------------
表达式 && 表达式
前面的表达式为真,则接着执行后面的表达式;
$user = 2;
$user && $password = 1;
echo $user,'|',$password;
前面的为假,则后面的表达式不执行。
$user = false;
$user && $password = 1;
echo $user,'|',$password;
表达式 || 表达式
前面的表达式为真,则后面的不执行;
$user = 2;
$user || $password = 1;
echo $user,'|',$password;
前面为假,则执行后面的
$user = 0;
$user || $password = 1;
echo $user,'|',$password;
-----------------------------------------------------------------------------------------------------------------------------------------------------
我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑!
看以下代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 |
|
奇怪吧, and/&&和or/||出来的结果竟然不一样的. 问题出在哪里呢?
我们再看一段代码!
?
1 2 3 4 5 6 7 8 |
|
更奇怪, 这时怎么是对的. 所以问题可能出现在=上, 一番google和文档,终于找到了答案!
运算符优先级
通过这个表, 我们可以看到 and/&& 和 or/|| 这两组运算符的优先级竟然是不一样的. and和or的优先级是低于=的, 所以上面的代码就好理解了, 就是先做赋值然后再做了一个and或or的逻辑运算, 这个运算的结果并没有存下来. 所以最后出来让我们匪夷所思的结果.
结合性 | 运算符 | 额外信息 |
---|---|---|
无结合性 | clone new | 克隆和new |
左 | [ | 数组 |
左 | ** | 算术 |
右 | ++ — ~ (int) (float) (string) (array) (object) (bool) @ | 类型和自增/自减 |
无结合性 | instanceof | 类型 |
右 | ! | 逻辑运算 |
左 | * / % | 算术 |
左 | + – . | 算术和字符串 |
左 | << >> | 按位运算 |
无结合性 | < <= > >= | 比较运算 |
无结合性 | == != === !== <> | 比较运算 |
左 | & | 按位运算和引用 |
左 | ^ | 按位运算 |
左 | | 按位运算 | |
左 | && | 逻辑运算 |
左 | | | 逻辑运算 | |
左 | ?: | 三元条件选择 |
右 | = += -= *= /= .= %= &= | = ^= <<= >>= => | 赋值 |
左 | and | 逻辑运算 |
左 | xor | 逻辑运算 |
左 | or | 逻辑运算 |
左 | , | 很多使用 |
PHP中与and、||与or的区别 | php中and 和 出坑指南相关推荐
- python中的return和print的区别_python中return和print的区别(详细)
Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...
- python中元祖 字典 列表的区别_Python中元祖,列表,字典的区别
原博文 2016-08-16 15:25 − Python中有3种內建的数据结构:列表.元祖和字典: 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的 ...
- python中的字典和类的区别_Python中的 字典和字典数据类型
字典 1.字典是Python的内建数据类型,我们知道序列是以连续的整数为索引,而字典用关键字作为索引.特别的,关键字必须是不可变类型,常为字符串或者数值. #如果元组中只包含字符串和数字,它可以作为关 ...
- 计算机程序中的堆和栈的区别,内存中的堆与栈(stack)和栈的区别
前言:我们经常听到一个概念,堆和栈.实际上,数据结构中有两个相同的概念,但这与内存堆栈不同.本文还将说明它们之间的区别,此内.函数完成后,这些内容将被自动销毁. .它的特点是效率高,但内存大小有限. ...
- java中字符流和字节流的区别_java中字节流和字符流有哪些区别
java中字节流和字符流的区别有:1.定义不同:2.结尾不同:3.处理方式不同:4.缓冲区不同:5.编码方式不同.字节流默认不使用缓冲区,而字符流使用缓冲区.字节流采用ASCII编码,字符流采用uni ...
- python中的方法和函数的区别_Python中函数和方法的区别
在Python中函数和方法是有区别的. 区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中. 区别二定义的方式: 1.函数定义的方式 def关键字 然后接函数名 再是 ...
- 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
文章目录 一.闭包中调用 Groovy 脚本中的方法 二.owner 与 delegate 区别 三.闭包中调用 Groovy 对象中的方法 一.闭包中调用 Groovy 脚本中的方法 在 Groov ...
- python中的方法和函数的区别_python中函数与方法的区别?
Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...
- oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别
Oracle中存储过程和函数的区别 存储过程和函数: www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...
最新文章
- 图像与数据类型的对应,以及如何显示
- JDK自带的实用工具native2ascii.exe
- HDU 1005 Number Sequence
- 网络缓存 峰值 linux,Linux Page Cache调优在Kafka中的应用
- QT5知识:装饰器@pyqtSlot和槽和信号
- 8数据提供什么掩膜产品_博硕能为你提供什么产品?
- oracle包如何进入编辑,修改 Oracle 的process和Session
- TypeScript BigInt
- HDU 4393 Throw nails [水题]
- 《spring-boot学习》-10-RabbitMQ
- php前台提交后台刷新,用js post数据后到后台,处理后如何实现前台页面刷新?...
- vbox黑苹果10.6.5升级无法进入系统(解决)
- 如何导入gradle版本不同的Android项目
- Spring基于注解管理bean(一文搞懂注解及使用注解)
- Windows 错误报告
- 衡水二中2021清华北大高考成绩查询,衡水二中:把5分钟利用成2小时,清北再录取101人!...
- 织梦后台登陆提示验证码不正确
- 父爱,是一首深沉的诗。
- linux连接小米随身wifi密码忘记了,小米路由器无线密码(wifi密码)忘记了怎么办?...
- oracle 日期的常用写法
热门文章
- PPT基础(四十一)设置默认字体和形状
- 云计算机玩绝地求生,什么是云电脑?为什么低配电脑也能玩绝地求生?
- [附源码]java+ssm计算机毕业设计构建养猪场管理系统3t2t8(源码+程序+数据库+部署)
- 拉格朗日中值定理,柯西中值定理,积分中值定理,广义积分中值定理的证明.( 纯手写,细节)
- 使用matlab绘制地图
- 深度学习浅析,以及又拍云图片鉴别的实践进阶
- C语言实现二维数组旋转
- PHP如何给整个内容填充背景,如何给文字添加背景图?给文字填充图片背景色的操作方法...
- php 长链接变为短链接,长链接转短链接原理
- Mapping和Analysis: