PHP语句的PHP性能差异条件

时间:2016-03-28 01:50:20

标签: php if-statement conditional conditional-statements php-7

嘿,快速问题,任何人都知道这两个代码之间是否有任何性能差异(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.000000001%),我仍然想知道答案。

2 个答案:

答案 0 :(得分:1)

我知道@tom通过说“无所谓”开始他的回答,但这不能用力,所以我将在另一个答案中进一步阐述。

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

  • 当时服务器正在做什么;
  • 网络延迟变化;
  • 当时外部依赖关系(如DB)的繁忙程度。

所以......这没关系。

始终选择您认为最清晰的代码,而且 - 更重要的是 - 其他人会找到最清晰的代码。这通常意味着最简单的。

根据您的具体情况,鉴于您给我们提供了“假”代码,甚至无法说出您的示例可能是什么:

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

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

尽可能清楚地编写代码(这并不一定意味着尽可能简洁,顺便说一句)。如果在某些时候您发现性能问题,那么然后(并且只有那时)才开始寻找优化。但是不要开始寻找这种优化。开始寻找能够发挥作用的事情。

我认为您可以使用代码示例做的最好的事情是将真实世界代码提交到Code Review,然后我们可以帮助您提出最清晰的编码方法。这就是你应该在这里问的问题。

答案 1 :(得分:0)

嗯,这是一个"答案"但实际上,当它归结为它时,它并不重要

方法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

注意:我得到的输出范围有些高于和低于对方。您获得的平均值可能是不同的时间,并且可以忽略不计,您真的不必担心,选择您最喜欢的方法。