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

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 Operator Precedence.)

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

                

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

充电完毕;

二 例子

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

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

1  $a = $a1 OR $a2;    //true  
2  $a = $a2 OR $a1;    //false 坑1
3  $a = $a1 || $a2;      //true
4
5  $b = $b1 AND $b2;         //true
6  $b = $b2 AND $b1;         //false  坑2
7  $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 true2. $a = true, 返回 $b=5 不执行计算.

思考:

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

  看到的各位不妨探讨下.

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

最新文章

  1. 《虚拟化工程师》-真实环境-培训计划 v0.0.1( 赠送:第 01\02 章 (免费视频))...
  2. python爬取知乎热搜_python爬取知乎评论
  3. 51单片机c语言数字输入输出,第五章 51单片机C语言程序--输入输出接口.pdf
  4. 分布式计算互相sayhello
  5. Keras 构建DNN 对用户名检测判断是否为非法用户名(从数据预处理到模型在线预测)
  6. MVC学习IIS的不同版本(一)
  7. 模板:k短路(可并堆)
  8. C#表格文字多收缩样式
  9. 报表引擎API开发入门—简单程序数据集
  10. 创建连接数据库(DBLink)
  11. Java关键字this详解
  12. 推荐系统实践 - 02利用用户行为数据
  13. macOS 如何游玩Renpy游戏
  14. Node对象的一些方法
  15. 崔羚:乳品行业后道包装及物流解决方案
  16. QQ、微信消息定时发送/自动发送【支持发送文件】
  17. HDU 2188-悼念512汶川大地震遇难同胞——选拔志愿者
  18. 英特尔商用客户端焕“芯”,释放数字时代三重生产力
  19. 第五次热身赛---坤坤的考试(easy version)
  20. scp与sftp命令

热门文章

  1. 为安装创建软链接,迁移文件夹
  2. Java 和操作系统交互,你猜会发生什么?
  3. 震惊!原来这才是Kafka的“真面目”!
  4. 利用策略模式优化过多 if else 代码
  5. 网络:HTTP状态码
  6. Java:异常处理的一些注意事项
  7. 怎么切换用户_走进通信:4G手机跟基站是怎么“交流”的
  8. pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
  9. 数据中心管理将成为未来十年所需的技能
  10. 四层交换机是什么?有什么用?与二层/三层交换机有何区别?