2

我对 PHP 很陌生,我对 IF 语句有疑问。

示例 1:

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

示例 2:

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

两者的结果相同,但哪个更快?这还重要吗?

4

6 回答 6

5

这是 Premature Optimization & Micro Benchmark ,你真的需要阅读Don't be STUPID: GRASP SOLID! 明白我为什么这么说

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

见基准

如果您想知道真正的区别,请查看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

第二代码

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

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

于 2013-06-06T09:10:51.803 回答
1

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

于 2013-06-06T09:02:09.963 回答
1

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

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

做同样的事情。

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

结果

于 2013-06-06T09:03:18.190 回答
1

预优化是万恶之源。

也就是说,您的第一段代码要快一点(但同样,最低限度 - 不要费心将代码更改为此 -可读性比您从更改条件中获得的微小速度增量更重要

第一段代码的3,000,000 次迭代:~ 0.9861679077 秒
第二段代码的 3,000,000 次迭代:~ 1.0684559345 秒

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

于 2013-06-06T09:09:58.860 回答
0

不,没关系。运行环境通常会克服如此小的性能调整。例如效率低下的算法或客户端最佳实践被忽略。

于 2013-06-06T09:02:21.057 回答
0

两者都是一样的,因为 PHP 解释器“足够聪明”可以弄清楚这一点。

于 2013-06-06T09:02:48.217 回答