【问题标题】:In what order are conditions inside an IF checked?检查 IF 内的条件的顺序是什么?
【发布时间】:2014-07-17 08:09:14
【问题描述】:

我有一个问题,我需要检查两个条件,A 和 B。问题是,检查 B 需要很多时间,如果 A 已经为假,我不需要检查 B。我可以轻松做:

if(a)
  if(b)
    // Do something

但我想知道,如果我使用if(a AND b),PHP 解释器会检查 A 和 B,然后应用 AND 运算符吗?还是它已经“知道”有一个 AND 运算符,所以如果 A 为假,它就不会检查 B?

【问题讨论】:

  • 如果a 为假,b 将不会被检查:)

标签: php


【解决方案1】:

取决于语言。 PHP 将在知道结果为 false 后立即停止评估,这意味着您可以这样做...

if($connection->connected() and $connection->doSomething()) {

}

如果已连接,它将继续doSomething()

【讨论】:

    【解决方案2】:

    您所说的称为短路评估。我不是 PHP 专家,但在 google 上的快速搜索说明它是用 PHP 实现的。因此,如果 A 为 false,则 B 不会被执行。

    http://en.wikipedia.org/wiki/Short-circuit_evaluation

    【讨论】:

      【解决方案3】:

      它已经“知道”有 AND 运算符,因此如果 A 为假,它不会检查 B。

      实际上,这个概念在编程语言中被称为短路。 PHP 支持短路。这意味着根据运算符的性质 php 将避免检查其他变量(以避免额外的开销)。

      AND 示例 如果(a 和 b) 所以如果 a 是假的,php 根本不会检查 b,因为任何 AND 假都是假的。

      或示例 如果(a 或 b) 所以如果 a 为真 php 将不会检查或评估 b 因为 true OR true 是 true , true OR false 也是如此。

      【讨论】:

        【解决方案4】:

        您可以像这样使用“lazy evaluation”:

        if (A && B) {
           //do shomething..
        }
        

        只有当“A”表达式为真时,“B”表达式才会计算。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-18
          • 2020-02-25
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          • 2014-05-08
          • 2021-08-31
          • 2023-03-07
          相关资源
          最近更新 更多