表现:条件测试与分配

时间:2010-12-30 06:40:37

标签: php performance conditional variable-assignment

我创建了一个循环,其中一个变量用于测试循环的当前运行是否是第一个循环。它很简单:

$firstrun = true;
while(condition){
  if($firstrun)
    // Do this
  else
    // Do that

  // Change $firstrun to false
}

我只是想知道(主要是出于好奇,因为我没有明显的区别),当我需要将$firstrun改为false时,测试变量是否为{{1}会更有效率在将其分配为false之前,或者在每次运行期间简单地将其重新分配为false?

例如:

true

或只是

$firstrun = true;
while(condition){
  if($firstrun)
    // Do this
  else
    // Do that

  if($firstrun)
    $firstrun = false;
}

PS: 我想这也是一个不好的例子,因为将$firstrun = true; while(condition){ if($firstrun) // Do this else // Do that $firstrun = false; } 重新分配给原始条件是最有效的,但正如我所说这是出于好奇所以我想只是假装这不是一个选项出于某种原因。

PSS: 当我想到这个想法时,我用PHP编写代码,但我猜测解决方案将是语言无关的。我以为我会把它丢在那里以防万一它出于某种原因。

最终,哪个更快,条件测试或变量分配?

3 个答案:

答案 0 :(得分:4)

以上都不是

$firstrun = true;
while(condition)
{
  if($firstrun)
  {
    $firstrun = false;
  }
  else
  {
  }
}

我之所以这么说,是因为你重复地将{false}重新分配给$firstrun,你应该在第一次循环时这样做

condition test vs assignment which is faster?

例如,您已经显示,是相同的(没有一些昂贵的调用的一个执行周期)

已更新

我认为条件测试会更慢,因为您可能会在此之后调用一系列后续操作

答案 1 :(得分:1)

这可能会更好,具体取决于condition实际上是什么:

if (condition) {

    //execute first run code

    while (condition) {
        //execute subsequent run code
    }
}

根据您的示例,您不需要额外的变量。

如果你知道代码总是至少运行一次,你甚至不需要if语句:

//execute first run code

while (condition) {
    //execute subsequent run code
}

答案 2 :(得分:0)

<?php

class Test
{
    private $var = 156135135;
    const SOMETHING = 156135135;

    public function assign()
    {
        $this->var = self::SOMETHING;
    }

    public function conditionalAssign()
    {
        if ($this->var != self::SOMETHING) {
            $this->var = SELF::SOMETHING;
        }
    }

}

$obj = new Test;

$start = microtime(true);
for ($i = 1; $i < 10000000; ++$i) {
    $obj->assign();
}
echo round((microtime(true) - $start) * 1000, 2).' ms'.PHP_EOL;

$start = microtime(true);
for ($i = 1; $i < 10000000; ++$i) {
    $obj->conditionalAssign();
}
echo round((microtime(true) - $start) * 1000, 2).' ms'.PHP_EOL;
当变量是整数时,

conditionalAssign总是更快,当变量是布尔值时通常更快,当变量是字符串时几乎相等。