zoukankan      html  css  js  c++  java
  • php or || 和 and &&

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

    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 true
    2. $a = true, 返回 $b=5 不执行计算.

    思考:

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

      看到的各位不妨探讨下.

  • 相关阅读:
    MYSQL-------安全等于<=>
    MYSQL-------转义简单说明
    Linux命令 sed
    长目录如何快速cd
    SQLAlchemy(增删改查)
    PostgreSQL主键约束混乱
    Python实现智能回复
    Python 腾讯云发送短信
    Python3 Twilio 发送短信
    Elasticsearch 多条件查询
  • 原文地址:https://www.cnblogs.com/liuyuxing/p/4997719.html
Copyright © 2011-2022 走看看