美文网首页
php or || 和 and &&

php or || 和 and &&

作者: 金星show | 来源:发表于2018-12-13 16:36 被阅读0次

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

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

逻辑运算符.


image.png

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

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

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


image.png

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

二.例子

$a1 = true;
$a2 = false;

$b1 = true;
$b2 = false;

var_dump($a1 AND $a2);    //false
var_dump($a1 && $a2);    //false

var_dump($a1 OR $a2);    //true
var_dump($a1 || $a2);    //true
$a = $a1 OR $a2;    //true   
 $a = $a2 OR $a1;      //true 坑1
 $a = $a1 || $a2;      //true 

 $b = $b1 AND $b2;         //true          
 $b = $b2 AND $b1;         //false  坑2
 $b = $b1 && $b2;           //false

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

三 .回到咱们的代码里

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

'=' 在file_exists()的括号内,绝对没有其他'=' 来扰乱判断结果.那么关注点就是短路了. 短路:在OR逻辑中,有1个为true,则结果为true,另外一个不再进行运算.

短路运用

defined('ENV') or die('env not defined!');
defined('ENV') or define('ENV','DEVELOP');

AND 理论上没有短路,因为需要至少两个条件都为真,才成立. 后面的条件是判断的一部分,不能作为短路语句使用了.

四. 坑.
 
and && OR || 在作为判断条件的时候由于跟=优先级的问题,不可避免的会是一个坑.

举例:

$a = 0;
$b = 0;
if ($a =4 || $b =5){
  echo $a,$b;
 }

因为 || 优先级大于 = ,计算顺序如下

  1. 1 || $b = 5 //always true
  2. a = true, 返回b=5 不执行计算.

相关文章

网友评论

      本文标题:php or || 和 and &&

      本文链接:https://www.haomeiwen.com/subject/faxycqtx.html