我见过很多人使用
defined('XXX') or define('XXX', 'XXX');
而不是
if(!defined('XXX')){
define('XXX', 'XXX');
}
第一个代码是否完全相同?为什么人们会使用它?
答案 0 :(得分:2)
该功能称为short circuit evaluation,它在许多语言中都很常见。布尔表达式从左到右进行计算,当已经有结果时,评估停止。在这种情况下,如果定义了常量,则表达式为TRUE
,无论其他术语如何,因此define()不会运行。
答案 1 :(得分:1)
他们完全一样。第一个是写的更短。与使用
类似mysql_connect(...) or die('some error');
仅当左侧为OR
时才会评估逻辑FALSE
的右侧。
答案 2 :(得分:0)
完全相同的事情。基本上是它的(真实条件)或错误的替代
答案 3 :(得分:0)
它完全相同,依赖于逻辑OR需要评估第二个操作数,如果第一个操作数计算为FALSE。
我不会过于宽泛地使用这种方法,因为它倾向于“短路”条件(即TRUE or f();
- 永远不会调用f())