if的用法更快?

时间:2013-06-06 08:59:21

标签: php

我是PHP新手,我对IF语句有疑问。

示例1:

<?php
if($a == 1){
  if($b == 1){
    echo 'test';
  }
}
?>

示例2:

<?php
if($a == 1 && $b ==1){
  echo 'test';
}
?>

两者都有相同的结果,但哪一个更快?它甚至重要吗?

6 个答案:

答案 0 :(得分:5)

这是早熟优化&amp; Micro Benchmark,你真的需要阅读Don't be STUPID: GRASP SOLID!来理解我为什么这么说

但是如果你想知道if($a == 1 && $b ==1)大多数PHP版本似乎更快

See Benchmark

如果您想知道真正的区别,请查看opcodes

第一个代码:

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   IS_EQUAL                                         ~0      !0, 1
         1    > JMPZ                                                     ~0, ->7
   3     2  >   IS_EQUAL                                         ~1      !1, 1
         3    > JMPZ                                                     ~1, ->6
   4     4  >   ECHO                                                     'test'
   5     5    > JMP                                                      ->6
   6     6  > > JMP                                                      ->7
         7  > > RETURN                                                   1

Secound Code

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   IS_EQUAL                                         ~0      !0, 1
         1    > JMPZ_EX                                          ~0      ~0, ->4
         2  >   IS_EQUAL                                         ~1      !1, 1
         3      BOOL                                             ~0      ~1
         4  > > JMPZ                                                     ~0, ->7
   3     5  >   ECHO                                                     'test'
   4     6    > JMP                                                      ->7
         7  > > RETURN                                                   1

你能看到差异很小的相似之处吗?这就是为什么担心这个问题没有意义,但写出好的和可读的代码。

答案 1 :(得分:1)

它们是相同的 - 在这两种情况下,如果第一个条件为假,则第二个条件不会被测试。

答案 2 :(得分:1)

两者都是一样的。没有太多的代码需要优化,甚至可以编写以缩短语法。

<?php
echo $a && b ? 'test' : '';
?>

是否相同。

我修改了一点Baba的基准来检查速记语法的结果。

Results

答案 3 :(得分:1)

预先优化是万恶之源。

那就是说,你的第一段代码要快一点(但同样,最低限度 - 不要费心将你的代码改为此 - 可读性比你改变的微小速度增加更重要你的条件

3,000,000 iterations of the first piece of code:~0.9861679077秒
3,000,000 iterations of the second piece of code:~1.0684559345秒

差异:~0.0822880268秒
每次迭代的差异:~0.0000000274秒(或274纳秒)。

答案 4 :(得分:0)

不,没关系。这种小的性能调整通常可以通过运行环境来克服。如低效算法或客户端最佳实践被忽略。

答案 5 :(得分:0)

两者都是一样的,因为PHP解释器“足够聪明”才能弄明白。