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 .
充电完毕;
二 例子
$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; //false 坑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 //always true
2. $a = true, 返回 $b=5 不执行计算.
思考:
我理解中,计算完第一步之后,条件expr 变为 $a = true = 5 ,这毫无疑问是一个syntax error ,怎么可以正常的做为判断条件了呢?
看到的各位不妨探讨下.
随机推荐
- javascript 事件代理及应用
事件代理又叫事件委托在前端发开中实际是非常有用的,说事件代理之前我们先说说事件绑定 <p onclick="test()" ></p> function t ...
- Spring-----6、Spring3.0提供的Java配置管理
转载自:http://blog.csdn.net/hekewangzi/article/details/45646279
- mysql导出数据到excel表中
mysql> select b.username,a.subject,a.money,FROM_UNIXTIME(a.ctime) from shop_pay a INNER JOIN ...
- tomcat组成及原理[转]
Tomcat安装好后打开目录;可以看到如下结构: bin :存放服务器脚本; conf :存放配置文件; lib :存放需要的JAR文件; wabapps :存放需要发布的Web应用程序及其部署文件; ...
- Holding Bin-Laden Captive!(hdoj1085)代码并未完全看懂
We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec ...
- Android小记之--android:listSelector
使用ListView和GridView时,经常使用android:listSelector来使item被选中时的状态.但如果不配合android:drawSelectorOnTop来使用可能达不到想要 ...
- UVA 816 Abbott’s Revenge
bfs求最短路,递归打印最短路的具体路径: 难点: 当前状态和转弯方式很复杂,要仔细处理: 递归打印:用一个数组存储路径中结点的前一个节点,递归查找 (bfs无法确定下一个结点,但对于没一个结点,它的 ...
- 【测试环境】java|jdk|ant
很多文章都有写啊,我只是汇总一下:现在java已经是1.7+了,但是我们很多的时候开发环境还是在1.5.16左右,需要自己去配置: 0.为了方便切换测试环境,我们可以把jdk放到一个比较固定的位置.比 ...
- linux----用户与whoami
linux中的su 命令可以完成用户切换:如我们先由root切换到mysql用户可以这样做su - mysql whoami #这个时候linux会打印出mysql who am i #这个时候lin ...
- Apriori algorithm
本文是个人对spmf中example1. mining frequent itemsets by using the apriori algorithm的学习. What is Apriori? A ...