将更常见的案例放在IF语句中是否更有效率?

时间:2014-06-12 17:16:39

标签: php

这是我最近的任务

特定变量有时会为空(除了一些连接到它的空格),在这种情况下我想回显“错误”消息

这是我的if语句:

if(preg_match("/^\s+$/",$var[$i])) {
  echo "Description not available";
} else {
  echo $var[$i];
}

我的问题是,既然错误是异常而不是常态,那么编写首先预测最常见情况的查询会更有效吗?

E.g:

if(!preg_match("/^\s+$/",$var[$i])) {
  echo $var[$i];
} else {
  echo "Description not available";
}

或许还有一种更好的方式可以写出更有效率吗?

可以公平地说,差异是不明显的,但可能没有差别!我不知道PHP引擎如何通过这些语句工作

5 个答案:

答案 0 :(得分:4)

没关系。这是用户的偏好。但我认为更多人喜欢在一开始就写出最常见的案例。无论如何,为什么你使用preg_match作为你的例子?

这是最简单的写作方式:

if(!empty($var[$i]) && !ctype_space($var[$i]) {       
    echo $var[$i];
} else {
    echo "Description not available!";
}

就像你看到的那样 - 我正在使用Beginning中最常见的案例。

我编辑了我的答案以检查空格。无论如何,使用空格检查正则表达式可能是更干净的解决方案。

答案 1 :(得分:1)

实际上没有区别。一般来说,if()中的逻辑最容易理解(额外的!增加了人类的解析复杂性)。也就是说,如果if的主体结尾相对较大而其他地方的代码很少,例如对于错误,您可能更愿意反转逻辑并将错误放在第一位,这样乍一看,错误和大多数逻辑都可以一起看。

答案 2 :(得分:1)

如果你有嵌套的if语句,你可以组织它们来测试最常见的结果,以加快速度。

如果您有更复杂的语句,其中包含AND和/或OR s,您可以将语句排列为“更快失败”。 F.E.使用AND并将最可能的选项放在首位将允许程序更频繁地跳过第二个测试。

您给出的示例不会执行其中任何一项。因此,虽然可以通过重新排序IF语句来加快速度,但在您的具体示例中是不可能的(除非您遵循@Xatenev给出的想法)。

答案 3 :(得分:0)

几年前我做了一些基准测试(在PHP 5.x上)并且我无法清楚地说明是否使用否定操作符进行时间或空间优化。

这完全取决于您的可读性,为此,我的观点是首先从错误案例开始的函数/方法。目的是将嵌套级别减少到我的函数中。

示例:而不是

function foo() 
{
    if ($a === 1) {
        if ($b === 2) {
            if ($c === 3) {
                return doD();
            } else {
                return doC();
            }
        } else {
            return doB();
        }
    } else {
        return doA();
    }
}

你可以做到

function foo() 
{
    if ($a !== 1) {
        return doA();
    }
    if ($b !== 2) {
        return doB();
    }
    if ($c !== 3) {
        return doC();
    }
    return doD();
}

只需切换布尔条件,即可了解如何减少嵌套级别。

但当然,这只是个人使用和偏好,这里没有规则也没有优化。

答案 4 :(得分:0)

我想这是更好更快的

if ( ! empty( trim($var[$i]) ) ){
     echo "Description available!";
   }
else{
     echo "Description not available!";
   }