Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php if';s更快吗?_Php - Fatal编程技术网

Php if';s更快吗?

Php if';s更快吗?,php,Php,我对PHP非常陌生,我对IF语句有一个疑问 例1: <?php if($a == 1){ if($b == 1){ echo 'test'; } } ?> 例2: <?php if($a == 1 && $b ==1){ echo 'test'; } ?> 两者的结果相同,但哪一个更快?这有关系吗?它们是相同的-在这两种情况下,如果第一个条件为假,第二个条件将不被测试。不,这不重要。运行环境通常会克服这样的性能调整。例如,效

我对PHP非常陌生,我对IF语句有一个疑问

例1:

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

例2:

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


两者的结果相同,但哪一个更快?这有关系吗?

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

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

两者都是相同的,因为PHP解释器“足够聪明”能够理解这一点。

两者都是相同的。没有多少代码需要优化,您甚至可以编写代码来缩短语法

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

同样的道理

我修改了一点Baba的基准测试,以检查速记语法的结果


先入为主是万恶之源

这就是说,您的第一段代码稍微快了一点(但再次强调,最低限度-不要麻烦将代码更改为这样-可读性比您通过更改条件获得的微小速度更重要

:~0.9861679077秒
:~1.0684559345秒

差异:~0.0822880268秒

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

这是过早的优化和微基准测试,你真的需要阅读才能理解我为什么这么说

但是如果你想知道($a==1&&$b==1)在大多数PHP版本中是否看起来更快

如果您想知道真正的区别,请查看操作码

第一个代码:

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

你能看到有多么相似,但差别非常小。这就是为什么担心这一点没有意义,而是编写好的可读代码。

用例:1.a==1b==1-这两个条件都将被测试2.a==1b==x-第一个将被测试,第二个将失败3.a==2b==x-第一个将被测试,这就是条件的结束在b上不会被考虑。投票被否决的人可能会解释这篇文章的错误。我没有投票被否决,但这不是对“哪个更快”问题的回答所以我不能为其他人解释这一点。当A和B都是真的或1的时候,两个都会回应“测试”,因为它不是这样的。也许下沉者不认为它是一样的,因为你没有做代码> $a==1 & & b==1 < /代码>。只是猜测。如果你问“什么更快”,你通常可以自己测试它。(几十万、数百万等)并测量时间。最终,对于像这样微小的事情,可读性比任何轻微的优化都更重要。即使你正在处理一个需要优化的大型项目,你也可能在别处找到它,而不是用小语法。这就是我喜欢速记语法的原因:)感谢您没有如何对代码进行基准测试…它们在单独的实例上运行…@Baba显然您不想在彼此之后运行它们,因为PHP编译器当时没有GC'd,因此最后一段代码总是比它应该的慢一点。请放心,在基准测试中证明我错了。尽管如此,这让我有点吃惊好吧,因为我希望第二段代码会快一点。无论是单独的实例,你都会注意到第二段代码通常位于代码板上约1.08处,第二段代码位于约0.98-~1.06处。它可能是代码板的PHP版本(5.2.5)。我执行了相同的基准测试:~1.4979648590秒,~1.0870530605秒。我的结果正好相反。我觉得这不是一个公平的比较,因为这段代码是在共享服务器上运行的。首先--耗时:1.0870530605秒,第二--耗时:1.0447418690秒。我很惊讶5:JMP 6,6:JMP 7没有得到优化。@Voitcus在所有PHP版本中进行测试,90%的时间第二个代码速度更快没关系,我注意到了其他一些东西:在第一个代码中,第5行是JMP到第6行,在第6行中是JMP到第7行;为什么有第6行?