我对 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';
}
?>
两者的结果相同,但哪个更快?这还重要吗?
这是 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
你能看到差异很小的相似之处吗?这就是为什么担心这个问题并编写好的可读代码是没有意义的。
它们是相同的——在这两种情况下,如果第一个条件为假,则不会测试第二个条件。
两者都是一样的。没有太多需要优化的代码,您甚至可以编写更短的语法。
<?php
echo $a && b ? 'test' : '';
?>
做同样的事情。
我修改了一点 Baba 的基准来检查速记语法的结果。
预优化是万恶之源。
也就是说,您的第一段代码要快一点(但同样,最低限度 - 不要费心将代码更改为此 -可读性比您从更改条件中获得的微小速度增量更重要。
第一段代码的3,000,000 次迭代:~ 0.9861679077 秒
第二段代码的 3,000,000 次迭代:~ 1.0684559345 秒
差异:~ 0.0822880268 秒
每次迭代的差异:~ 0.0000000274 秒(或 274 纳秒)。
不,没关系。运行环境通常会克服如此小的性能调整。例如效率低下的算法或客户端最佳实践被忽略。
两者都是一样的,因为 PHP 解释器“足够聪明”可以弄清楚这一点。