我是PHP新手,我对IF语句有疑问。
示例1:
<?php
if($a == 1){
if($b == 1){
echo 'test';
}
}
?>
示例2:
<?php
if($a == 1 && $b ==1){
echo 'test';
}
?>
两者都有相同的结果,但哪一个更快?它甚至重要吗?
答案 0 :(得分:5)
这是早熟优化&amp; 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
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的基准来检查速记语法的结果。
答案 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解释器“足够聪明”才能弄明白。