【问题标题】:php order of executionphp执行顺序
【发布时间】:2012-04-10 06:12:02
【问题描述】:

说,你有这样的条件;

if ($condition_1 && $condition_2)

你可以选择写成

if ($condition_2 && $condition_1)

现在,如果条件_1 需要 1 毫秒来判断它是真还是假,而另一方面,条件_2 需要更长的时间,比如 1000 毫秒!,你会将上述条件写成哪种方式?右边慢的还是左边慢的?

我假设当发现其中一个条件为 FALSE 时,PHP 不会费心检查另一个条件是否为 TRUE。如果真是这样,那将是本世纪最大的惊喜!

【问题讨论】:

  • 如果函数在 if 语句中以 1000 毫秒的速度运行,你最大的问题不是哪个函数先运行
  • 这被称为short-circuit evaluation,PHP 做到了。试试看。
  • @andreas!这是一个假设性的问题,我可以用 1ms 与 2ms 来表达这个问题,那时,我敢肯定有人会建议,为什么要打扰。 :)
  • 顺便说一句,这就是为什么像 mysql_query() or die(); 这样的声明有效的原因。 die() 只会在 mysql_query() 返回 false 时运行。

标签: php performance short-circuiting


【解决方案1】:

条件从左到右计算。将最短的条件放在最左边的位置。你是对的,如果该 if 语句中最左边的条件评估为 false,则根本不检查下一个条件。

【讨论】:

    【解决方案2】:

    CC++AND 条件下的第一个 FALSE 中断。 PHP 也是如此。所以,我建议把较短的放在第一位。这个例子清楚地说明了这种情况:

    function short(){
        return false;
    }
    
    function long(){
        sleep(5);// sleep for 5 secondsd
        return true;
    }
    
    if ( short() && long() ){
        echo "condition passed";
    }else{
        echo "condition failed";
    }
    

    这将几乎立即打印“条件失败”而无需等待 5 秒....

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2016-11-06
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      相关资源
      最近更新 更多