在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

$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/||出来的结果竟然不一样的. 问题出在哪里呢?
我们再看一段代码!

?

1

2

3

4

5

6

7

8

$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 逻辑运算
, 很多使用

PHP中与and、||与or的区别 | php中and 和 出坑指南相关推荐

  1. python中的return和print的区别_python中return和print的区别(详细)

    Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...

  2. python中元祖 字典 列表的区别_Python中元祖,列表,字典的区别

    原博文 2016-08-16 15:25 − Python中有3种內建的数据结构:列表.元祖和字典: 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的 ...

  3. python中的字典和类的区别_Python中的 字典和字典数据类型

    字典 1.字典是Python的内建数据类型,我们知道序列是以连续的整数为索引,而字典用关键字作为索引.特别的,关键字必须是不可变类型,常为字符串或者数值. #如果元组中只包含字符串和数字,它可以作为关 ...

  4. 计算机程序中的堆和栈的区别,内存中的堆与栈(stack)和栈的区别

    前言:我们经常听到一个概念,堆和栈.实际上,数据结构中有两个相同的概念,但这与内存堆栈不同.本文还将说明它们之间的区别,此内.函数完成后,这些内容将被自动销毁. .它的特点是效率高,但内存大小有限. ...

  5. java中字符流和字节流的区别_java中字节流和字符流有哪些区别

    java中字节流和字符流的区别有:1.定义不同:2.结尾不同:3.处理方式不同:4.缓冲区不同:5.编码方式不同.字节流默认不使用缓冲区,而字符流使用缓冲区.字节流采用ASCII编码,字符流采用uni ...

  6. python中的方法和函数的区别_Python中函数和方法的区别

    在Python中函数和方法是有区别的. 区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中. 区别二定义的方式: 1.函数定义的方式 def关键字  然后接函数名 再是 ...

  7. 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

    文章目录 一.闭包中调用 Groovy 脚本中的方法 二.owner 与 delegate 区别 三.闭包中调用 Groovy 对象中的方法 一.闭包中调用 Groovy 脚本中的方法 在 Groov ...

  8. python中的方法和函数的区别_python中函数与方法的区别?

    Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...

  9. oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别

    Oracle中存储过程和函数的区别 存储过程和函数:  www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...

最新文章

  1. 图像与数据类型的对应,以及如何显示
  2. JDK自带的实用工具native2ascii.exe
  3. HDU 1005 Number Sequence
  4. 网络缓存 峰值 linux,Linux Page Cache调优在Kafka中的应用
  5. QT5知识:装饰器@pyqtSlot和槽和信号
  6. 8数据提供什么掩膜产品_博硕能为你提供什么产品?
  7. oracle包如何进入编辑,修改 Oracle 的process和Session
  8. TypeScript BigInt
  9. HDU 4393 Throw nails [水题]
  10. 《spring-boot学习》-10-RabbitMQ
  11. php前台提交后台刷新,用js post数据后到后台,处理后如何实现前台页面刷新?...
  12. vbox黑苹果10.6.5升级无法进入系统(解决)
  13. 如何导入gradle版本不同的Android项目
  14. Spring基于注解管理bean(一文搞懂注解及使用注解)
  15. Windows 错误报告
  16. 衡水二中2021清华北大高考成绩查询,衡水二中:把5分钟利用成2小时,清北再录取101人!...
  17. 织梦后台登陆提示验证码不正确
  18. 父爱,是一首深沉的诗。
  19. linux连接小米随身wifi密码忘记了,小米路由器无线密码(wifi密码)忘记了怎么办?...
  20. oracle 日期的常用写法

热门文章

  1. PPT基础(四十一)设置默认字体和形状
  2. 云计算机玩绝地求生,什么是云电脑?为什么低配电脑也能玩绝地求生?
  3. [附源码]java+ssm计算机毕业设计构建养猪场管理系统3t2t8(源码+程序+数据库+部署)
  4. 拉格朗日中值定理,柯西中值定理,积分中值定理,广义积分中值定理的证明.( 纯手写,细节)
  5. 使用matlab绘制地图
  6. 深度学习浅析,以及又拍云图片鉴别的实践进阶
  7. C语言实现二维数组旋转
  8. PHP如何给整个内容填充背景,如何给文字添加背景图?给文字填充图片背景色的操作方法...
  9. php 长链接变为短链接,长链接转短链接原理
  10. Mapping和Analysis: