if语句的PHP性能差异条件

if语句的PHP性能差异条件,php,if-statement,conditional,conditional-statements,php-7,Php,If Statement,Conditional,Conditional Statements,Php 7,大家都知道这两个代码(PHP-7)之间是否存在性能差异: 及 (是的,我知道变量没有定义,问题是关于if语句而不是变量) 我问这个问题是因为我专注于代码的可读性,但同时尽可能保持最佳性能 即使只是一个非常微小的性能差异(例如0.00000001%),我仍然想知道答案。好吧,这里有一个“答案”,但实际上,当它归结到它时,这并不重要 方法1 输出:0.17261600494385 方法2 输出:0.16869401931763 注意:我得到了一系列的输出,它们之间有高有低。你得到的平均值可能

大家都知道这两个代码(PHP-7)之间是否存在性能差异:

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

我问这个问题是因为我专注于代码的可读性,但同时尽可能保持最佳性能

即使只是一个非常微小的性能差异(例如0.00000001%),我仍然想知道答案。

好吧,这里有一个“答案”,但实际上,当它归结到它时,这并不重要

方法1

输出:0.17261600494385 方法2

输出:0.16869401931763
注意:我得到了一系列的输出,它们之间有高有低。你得到的平均值可能是不同的时间段,可以忽略不计,因此你真的不必担心,选择你最喜欢的方法。

我知道@tom在开始回答时会说“没关系”,但这一点强调得不够,所以我将在单独的回答中进一步阐述

@皮奥特·加多夫斯基:只是别担心这类事情。如果需要循环数千次才能看到差异,这意味着这是一个微观优化的案例。此处的差异将在同时进行的任何其他考虑的背景噪声中消失,例如:

  • 服务器当时还在做什么
  • 网络延迟变化
  • 当时像DBs这样的外部依赖项有多忙
所以。。。这根本不重要

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

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

  • 这两个条件有多复杂
  • 它们真的只是单个变量吗
  • 变量有解释性名称吗
  • 如果条件实际上是布尔表达式而不是变量。。。考虑把它们命名为中介变量。
这些是你应该担心的事情

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


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

逻辑上它们是一样的。为什么不设置一个测试环境并进行测试以查看呢?可能会有差异,但这完全无关紧要。换句话说,它不会对你的表现产生任何影响。您应该编写代码,使其可读并有意义。一种更简单的方法是:
返回$cond1&&$cond2基准点自己做,微优化不适合堆栈溢出问题它们是一样的。我通常使用第二个,因为它使您的代码简短而美观。
public function isActive() : bool
{
    if ($cond1) {
        if ($cond2) {
            return true;
        }
    }

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

    return false;
}
<?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;
?> 
<?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;
?>