【问题标题】:Consecutive if-conditions in PHP [duplicate]PHP中的连续if条件[重复]
【发布时间】:2014-06-29 20:31:48
【问题描述】:

如果您在 PHP 中有两个连续的条件,它们是否都被评估,或者如果第一个条件已经失败,则 if-case 评估被取消(因此第二个条件的结果无关紧要)?

if (condition1 && condition2) { }

【问题讨论】:

  • 像这样两个条件都必须为真。如果你使用 ||这将是任何一个条件都需要为真。所以如果第一个条件为假,它确实会跳过
  • &&的情况下,如果第一个条件失败,它会跳过整个if部分。如果第一个是真的,它将移动到第二个。如果 second 为真,则进入条件,否则跳过它
  • @Nic 可能是重复的,但我以前不知道“短路评估”这个词。感谢这里的答案,不再是。
  • 嗨@Garrin,不用担心 - 我不怪你不知道这个词,或者没有找到其他问题。但是,由于您的问题与其他问题几乎相同,因此我将此问题标记为重复问题。

标签: php


【解决方案1】:

PHP 使用Short Circuit Evaluation,因此如果第一个条件为假,则甚至不会评估第二个条件。

【讨论】:

  • 不错的参考表:}
  • +1 使用正确的术语
  • @neelsg 关于按位运算符的部分不正确。两者都将被评估,但可能会产生不正确的结果! var_dump(true & 10); 输出:int(0)
  • @nl-x,它基本上可以工作,但你是对的,可能会有一些不需要的副作用。如果已将其删除,因为无论如何都有更正确的方法来解决这个问题
  • 每天学习新东西,喜欢这些信息!
【解决方案2】:

由于您使用的是&&,如果左侧条件失败,则不会评估右侧条件

if (statement1 && statement2)
{
    //If the left part is false, the right part is not even checked
}


if (statement1 || statement2)
{
    //if the left part is false, the right part is checked
}

【讨论】:

    【解决方案3】:

    如果第一个条件的结果不需要评估第二个条件,PHP 将不会评估它(第二个条件)。这称为Short-circuit evaluation,在PHP's documentation on logical operators 中也有这个含义。

    这是一个证明它的小例子:

    <?php
    
    function foo() {
        echo 'Bar';
        return true;
    }
    
    if (false && foo()) { }
    

    由于 PHP 使用短路求值,foo() 不会被执行,因此Bar 不会打印在屏幕上。

    因为 'Test' 永远不会是 echoed,所以您可以得出结论,如果第一个条件返回 false,则永远不会评估第二个条件。

    同样适用于|| (OR) 运算符,但反过来:

    <?php
    
    function foo() {
        echo 'Bar';
        return true;
    }
    
    if (true || foo()) { }
    

    由于第一个条件已经是true,所以不需要评估第二个条件。同样,foo() 未执行,因此您将看到一个空白屏幕。

    【讨论】:

      【解决方案4】:

      它是一个 AND。而且 PHP 很懒惰。如果第一个函数返回 false,则不会触及其他函数。与 OR 相同。如果你使用它,PHP 是惰性的,只在必要时进行评估。

      if(condition1() || condition2())
      

      如果condition1() 返回true,条件2 将保持不变。很高兴知道性能,在这种情况下总是先评估快速函数。^^

      【讨论】:

        猜你喜欢
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 2013-03-05
        • 2017-04-11
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多