博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php or || 和 and &&
阅读量:4452 次
发布时间:2019-06-07

本文共 1733 字,大约阅读时间需要 5 分钟。

追溯代码时遇到这个坑,一直是略有懵懂,那就填了这个坑.

1 if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path = BASEPATH.'config/'.ENVIRONMENT.'/database.php')

一  语法

  逻辑运算符.

运算符 名称 例子 结果
AND 逻辑与 $x and $y $x 和 $y 都为 true,则返回 true
&& 逻辑与 $x && $y $x 和 $y 都为 true,则返回 true
OR 逻辑或 $x or $y $x 和 $y 至少有一个为 true,则返回 true
|| 逻辑或 $x || $y $x 和 $y 至少有一个为 true,则返回 true

  表面看两组操作符没有差异.但是

The reason for the two different variations of "and" and "or" operators is that they operate at different precedences. (See .)

就是优先级不同啦;查优先级表看下,

                

排序 && > || > = > and > or .

充电完毕;

二 例子

3 $a1 = true; 4 $a2 = false; 5  6 $b1 = true; 7 $b2 = false; 8  9 var_dump($a1 AND $a2);    //false10 var_dump($a1 && $a2);    //false11 12 var_dump($a1 OR $a2);    //true13 var_dump($a1 || $a2);    //true

跟预想的一样.那么坑在哪里

1  $a = $a1 OR $a2;    //true   2  $a = $a2 OR $a1;    //false 坑13  $a = $a1 || $a2;      //true 4 5  $b = $b1 AND $b2;         //true          6  $b = $b2 AND $b1;         //false  坑27  $b = $b1 && $b2;           //false

所以一定注意啊,逻辑判断的时候放好括号啊

三  回到咱们的代码里

 
1 if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path = BASEPATH.'config/'.ENVIRONMENT.'/database.php')
 
'=' 在file_exists()的括号内,绝对没有其他'=' 来扰乱判断结果.那么关注点就是短路了. 短路:在OR逻辑中,有1个为true,则结果为true,另外一个不再进行运算.
1 短路运用 2 defined('ENV') or die('env not defined!');3 defined('ENV') or define('ENV','DEVELOP');
 
 
AND 理论上没有短路,因为需要至少两个条件都为真,才成立. 后面的条件是判断的一部分,不能作为短路语句使用了. 四. 坑.   and && OR || 在作为判断条件的时候由于跟=优先级的问题,不可避免的会是一个坑.
1 举例:2 $a = 0;3 $b = 0;4 if ($a =4 || $b =5){5   echo $a,$b;6 }
 
因为 || 优先级大于 = ,计算顺序如下 1. 1 || $b  //always true 2. $a = true, 返回 $b=5 不执行计算.

思考:

  我理解中,计算完第一步之后,条件expr 变为 $a = true = 5 ,这毫无疑问是一个syntax error ,怎么可以正常的做为判断条件了呢?

  看到的各位不妨探讨下.

转载于:https://www.cnblogs.com/liuyuxing/p/4997719.html

你可能感兴趣的文章
用myEclipse连接数据源生成动态数据报表
查看>>
[myeclipse]@override报错问题
查看>>
자주 쓰이는 정규표현식
查看>>
超简单的listview单选模式SingleMode(自定义listview item)
查看>>
vue-11-路由嵌套-参数传递-路由高亮
查看>>
HDU 1199 - Color the Ball 离散化
查看>>
[SCOI2005]骑士精神
查看>>
Hibernate原理解析-Hibernate中实体的状态
查看>>
六时车主 App 隐私政策
查看>>
C语言常见问题 如何用Visual Studio编写C语言程序测试
查看>>
Web用户的身份验证及WebApi权限验证流程的设计和实现
查看>>
hdu 2098 分拆素数和
查看>>
[ONTAK2010]Peaks kruskal重构树,主席树
查看>>
ECMAScript6-let与const命令详解
查看>>
iOS 使用系统相机、相册显示中文
查看>>
什么是敏捷设计
查看>>
SCSS的基本操作
查看>>
"安装程序无法定位现有系统分区" 问题解决
查看>>
.NET中栈和堆的比较
查看>>
【莫队】bzoj 3781,bzoj 2038,bzoj 3289
查看>>