问两次表现不好?

时间:2017-09-21 10:05:39

标签: php

我有一个功能:

function getMilk() {
    if($condition == true)
        return "Milk for you, madam";
    return false;
}

示例1:

if(getMilk()) 
    echo getMilk();

第一个例子是否使PHP运行两次牛奶?

示例2:

echo getMilk(); // don't check for milk first, just get it if they have it

如果我是PHP,我宁愿得到第二个例子。然后,我不必跑到商店检查牛奶,然后再跑一次去拿它。

示例2会更快/更好,还是不重要?

3 个答案:

答案 0 :(得分:66)

是的,您正在调用该函数两次。通过执行以下操作之一,避免这样做(因为调用函数的成本可能很高):

$getMilk = getMilk();
if($getMilk) echo $getMilk;

您可以将其减少为一行(但不可读)格式:

if ($getMilk = getMilk()) echo $getMilk;

您还可以使用内联if三元组,并进行初步审核:

echo getMilk()?:""; //Will echo the result of getMilk() if there is any or nothing.

答案 1 :(得分:15)

是的,PHP会像你告诉的那样经常调用函数。该功能将执行两次。你不应该这样做,因为你本质上不知道任何特定功能的价格是多少,和/或如果你重写函数的实现细节,将来可能会改变。特别是那些具有副作用的函数(它们修改某些东西,例如它们写入文件)不能经常被调用。

相反,将函数结果存储在变量中:

$milk = getMilk();
if ($milk) {
    echo $milk;
}

这甚至可以内联到:

if ($milk = getMilk()) {
    echo $milk;
}

答案 2 :(得分:5)

这个问题在理论上比什么都重要,因为性能差异可以忽略不计。

那就是说,在你的情况下,第二种方法很好,因为false没有转化为任何类型的输出。所以

echo getMilk();

要么回声,要么没有。