【问题标题】:Will an If Statement Stop Checking if the first OR condition is met in PHP?如果在 PHP 中满足第一个 OR 条件,If 语句会停止检查吗?
【发布时间】:2015-05-11 12:41:44
【问题描述】:

我想尝试让我的代码尽可能高效,并根据我阅读的内容

if($process == true)

将比调用函数的东西处理得更快。即

if(count($total) == 100) 

所以,如果我的 if 中有一个 OR,并且第一个条件是一个简单的布尔检查,结果是真的,那么条件的第二部分仍然会被检查吗?

例如

$process = true;
if($process == true || count($total) == 100)

即使过程为真并且足以使条件通过,计数函数是否仍会被调用。

【问题讨论】:

标签: php


【解决方案1】:

PHP 确实有一个名为短路的机制: http://php.net/manual/en/language.operators.logical.php#example-140

如果逻辑 OR 的第一个操作数为真,则不计算第二部分,也不调用函数。

由于将变量与布尔值进行比较比在 PHP 中调用函数更快,这种机制可以帮助您进行优化,但永远不要忘记过早的优化是万恶之源。

【讨论】:

    【解决方案2】:

    它的工作方式与完全逻辑运算符的工作方式相同。例如,foo() 永远不会被调用。

    if (false && foo()) {
    
    }
    
    if (true  || foo()) {
    
    }
    

    【讨论】:

      【解决方案3】:

      OR 的情况下,一旦发现一个真实的陈述,它就不会检查进一步的条件,

      AND 的情况下,一旦发现虚假陈述,它就不会检查进一步的条件。 它被称为惰性评估

      插图:

      <?php
      $var=0;
      if($var++ || $var++){//Since 0 means false in Php both conditions will be checked
      //Do nothing
      }
      echo $var;//output :2
      

      如果我们将条件更改为if(++$var || $var++),第一个条件将返回true,因此不会检查下一个条件,因此它将输出为1

      【讨论】:

      • 这在所有语言中都很常见吗?
      • @DanHastings - 不,不是,您需要阅读您使用的语言的文档以检查它是否使用惰性评估
      【解决方案4】:

      如果 a or 中的任何语句为真,则不会检查其他语句,并且 if 将被评估为真。

      如果您正在检查 and 语句,所有语句都需要评估为真,如果其中任何一个为假,则雄蕊检查将停止,因为 if 已经为假。

      另一个重要的细节是 if 中的函数不会减慢 if 检查,会减慢的是函数正在做什么,如果它需要大量处理当然会比只检查布尔值慢但不要害怕使用函数,因为它们在任何系统中都非常重要。

      【讨论】:

        【解决方案5】:

        (我记得 C# 中的这个,但我很确定它在 php 中是一样的)

        这取决于你是使用单 | 还是双 || 我认为如果你使用单的,它仍然会做另一个(当它后面有像登录这样的功能时很有用)如果你使用双第一个为真,它会跳过第二个条件。

        (这可能是另一种方式,所以最好的办法是使用 Javascript 进行尝试,例如。创建 2 个函数,每个函数在发出警报后返回 true,而这些函数使用 1 行或 2 行)

        【讨论】:

        • 在 PHP 中,|按位 OR 运算符,||逻辑 OR 运算符
        • 在 C# 中 |也是位运算符。它们对数据执行操作,因此不会表现出实际逻辑比较运算符的短路行为。不要混淆这两者,按位和比较的用途截然不同。
        猜你喜欢
        • 2012-07-06
        • 1970-01-01
        • 2013-07-08
        • 1970-01-01
        • 2021-12-16
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多