【发布时间】:2011-07-24 18:09:48
【问题描述】:
我见过很多人在使用
defined('XXX') or define('XXX', 'XXX');
而不是
if(!defined('XXX')){
define('XXX', 'XXX');
}
第一个代码做的事情完全一样吗?人们为什么使用它?
【问题讨论】:
我见过很多人在使用
defined('XXX') or define('XXX', 'XXX');
而不是
if(!defined('XXX')){
define('XXX', 'XXX');
}
第一个代码做的事情完全一样吗?人们为什么使用它?
【问题讨论】:
该功能称为short circuit evaluation,它在许多语言中都很常见。布尔表达式从左到右计算,当已经有结果时停止计算。在这种情况下,如果定义了常量,则无论其他术语如何,表达式都是TRUE,因此 define() 不会运行。
【讨论】:
他们做同样的事情。第一个只是写得更短。类似于使用
mysql_connect(...) or die('some error');
仅当左侧为 FALSE 时,才会评估逻辑 OR 的右侧。
【讨论】:
做同样的事情。基本上它的 (TRUE CONDITION) 或 FALSE ALTERNATIVE
【讨论】:
它的作用完全相同,这取决于逻辑 OR 需要对第二个操作数进行求值,如果第一个操作数的计算结果为 FALSE。
我不会太广泛地使用这种方法,因为它倾向于“短路”条件(即TRUE or f(); - f() 永远不会被调用)
【讨论】:
or 的整个想法是,如果第一个谓词为真,则永远不会评估第二个谓词。
or?