• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

phpor||和and&&

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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 ,怎么可以正常的做为判断条件了呢?

  看到的各位不妨探讨下.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
自定义PHP页面跳转函数redirect($url,$time=0,$msg='')发布时间:2022-07-10
下一篇:
PHPECHO字符串不解析发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap