【问题标题】:Checking for undefined constants检查未定义的常量
【发布时间】:2011-07-24 18:09:48
【问题描述】:

我见过很多人在使用

defined('XXX') or define('XXX', 'XXX');

而不是

if(!defined('XXX')){
  define('XXX', 'XXX');
}

第一个代码做的事情完全一样吗?人们为什么使用它?

【问题讨论】:

    标签: php constants undefined


    【解决方案1】:

    该功能称为short circuit evaluation,它在许多语言中都很常见。布尔表达式从左到右计算,当已经有结果时停止计算。在这种情况下,如果定义了常量,则无论其他术语如何,表达式都是TRUE,因此 define() 不会运行。

    【讨论】:

      【解决方案2】:

      他们做同样的事情。第一个只是写得更短。类似于使用

      mysql_connect(...) or die('some error');
      

      仅当左侧为 FALSE 时,才会评估逻辑 OR 的右侧。

      【讨论】:

        【解决方案3】:

        做同样的事情。基本上它的 (TRUE CONDITION) 或 FALSE ALTERNATIVE

        【讨论】:

          【解决方案4】:

          它的作用完全相同,这取决于逻辑 OR 需要对第二个操作数进行求值,如果第一个操作数的计算结果为 FALSE。

          我不会太广泛地使用这种方法,因为它倾向于“短路”条件(即TRUE or f(); - f() 永远不会被调用)

          【讨论】:

          • 嗯?逻辑运算符是短路的。
          • 在您撰写评论时已更正。当我点击提交时,我觉得我忘记了什么或没有忘记什么:)
          • 嗯,也好不到哪里去。使用or 的整个想法是,如果第一个谓词为真,则永远不会评估第二个谓词。
          • 实际上,这就是我所说的:如果(并且仅当)第一个评估为假时,第二个得到评估。所以在 OP 的情况下,达到了预期的效果:要么定义你的常量,要么现在定义它。如果您希望获得第二个操作数,那么短路会搞砸您,但永远不要这样做。
          • 我只是提到了第二部分。如果你想评估他们两个,你到底为什么要使用or
          猜你喜欢
          • 2015-05-24
          • 1970-01-01
          • 2010-12-24
          • 2018-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          • 1970-01-01
          相关资源
          最近更新 更多