Php if';s更快吗?
我对PHP非常陌生,我对IF语句有一个疑问 例1: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($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行?