我有一个功能:
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会更快/更好,还是不重要?
答案 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();
要么回声,要么没有。