php or || 和 and
2024-04-10 17:49:12
追溯代码时遇到这个坑,一直是略有懵懂,那就填了这个坑.
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
最新文章
- 《虚拟化工程师》-真实环境-培训计划 v0.0.1( 赠送:第 01\02 章 (免费视频))...
- python爬取知乎热搜_python爬取知乎评论
- 51单片机c语言数字输入输出,第五章 51单片机C语言程序--输入输出接口.pdf
- 分布式计算互相sayhello
- Keras 构建DNN 对用户名检测判断是否为非法用户名(从数据预处理到模型在线预测)
- MVC学习IIS的不同版本(一)
- 模板:k短路(可并堆)
- C#表格文字多收缩样式
- 报表引擎API开发入门—简单程序数据集
- 创建连接数据库(DBLink)
- Java关键字this详解
- 推荐系统实践 - 02利用用户行为数据
- macOS 如何游玩Renpy游戏
- Node对象的一些方法
- 崔羚:乳品行业后道包装及物流解决方案
- QQ、微信消息定时发送/自动发送【支持发送文件】
- HDU 2188-悼念512汶川大地震遇难同胞——选拔志愿者
- 英特尔商用客户端焕“芯”,释放数字时代三重生产力
- 第五次热身赛---坤坤的考试(easy version)
- scp与sftp命令
热门文章
- 为安装创建软链接,迁移文件夹
- Java 和操作系统交互,你猜会发生什么?
- 震惊!原来这才是Kafka的“真面目”!
- 利用策略模式优化过多 if else 代码
- 网络:HTTP状态码
- Java:异常处理的一些注意事项
- 怎么切换用户_走进通信:4G手机跟基站是怎么“交流”的
- pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
- 数据中心管理将成为未来十年所需的技能
- 四层交换机是什么?有什么用?与二层/三层交换机有何区别?