if语句的PHP性能差异条件


PHP performance difference conditions of if statement

嘿,快速提问,任何人都知道这两个代码(PHP-7)之间是否存在任何性能差异:

public function isActive() : bool
{
    if ($cond1) {
        if ($cond2) {
            return true;
        }
    }
    return false;
}

public function isActive() : bool
{
    if ($cond1 && $cond2) {
        return true;
    }
    return false;
}

(是的,我知道变量没有定义,问题是关于if语句而不是变量)

我之所以问这个问题,是因为我关注代码的可读性,但同时尽我所能保持我的性能。

即使这只是一个很小的性能差异(例如0.000000000001%),我仍然想知道答案。

我知道@tom在回答开始时说"没关系",但这再怎么强调也不为过,所以我将在另一个答案中进一步阐述。

@piotr gajdowski:只是不要担心这类事情。如果需要循环数千次才能看到差异,这意味着这是一种微观优化的情况。这里的差异将在同时进行的任何其他考虑的背景噪声中消失,例如:

  • 服务器当时还在做什么
  • 网络时延变化
  • 像DB这样的外部依赖关系当时有多忙

所以。。。这根本不重要。

总是选择你觉得最清晰的代码,更重要的是,其他人会发现最清晰的。这通常意味着最简单的。

对于你的具体情况,如果你给了我们"假"代码,甚至不可能说出你的例子可能是什么:

  • 这两个条件有多复杂
  • 它们真的只是单一变量吗
  • 变量有解释性名称吗
  • 如果条件实际上是布尔表达式而不是变量。。。考虑将它们放在命名良好的中间变量中

这些是你应该担心的事情。

尽可能清晰地编写代码(顺便说一句,这并不一定意味着尽可能简洁)。如果在某个时候发现您有性能问题,然后(并且只有在那时)开始寻找优化。但不要开始寻找这种优化。开始寻找有意义的东西。

我认为你能对你的代码示例做的最好的事情是将真实世界的代码提交给代码审查,然后我们可以帮助你想出最清晰的编码方法。这就是你应该在这里问的问题。

好吧,这里有一个"答案",但实际上,归根结底,并不重要

方法1

<?php
$temp = 10000;
function isActive() {
    if ($cond1) {
        if ($cond2) {
            return true;
        }
    }
    return false;
} 
$start = microtime(true);
while ($temp) {
  isActive();
  $temp--;
}
echo $time_elapsed_secs = microtime(true) - $start;
?> 

输出:0.17261600494385

方法2

<?php
$temp = 10000;
function isActive() {
    if ($cond1 && $cond2) {
        return true;
    }
    return false;
} 
$start = microtime(true);
while ($temp) {
  isActive();
  $temp--;
}
echo $time_elapsed_secs = microtime(true) - $start;
?> 

输出:0.16869401931763

注意:我得到了一系列的输出,每个输出都有高有低。你得到的平均值可能是不同的时间,而且可以忽略不计,所以你真的不必担心,选择你最喜欢的方法。