如果一个var调用了一个函数,是否每次回显var时都执行这个函数?


If a var calls a function, does it execute each time the var is echoed?

假设我有一个返回1的函数和一个等于该函数的var,这样我可以稍后调用它。

function number() {
    return 1;
}
$var = number();
echo $var;

响应$var 10次会调用number() 10次吗?我只希望将返回值设置为变量。实际的函数非常重,可能需要几秒钟才能执行,因此只执行一次是有益的。我不想让它执行所有我回显的10次。我怎样才能做到这一点呢?

No。变量不"调用函数"。您正在调用函数并将其结果赋值给变量。这种情况只发生一次。函数返回赋值的;你没有赋值函数。

易于证明:

function number() {
    echo 'function!';
    return 1;
}
echo 'assigning!';
$var = number();
echo $var;
echo $var;
echo $var;

将函数的返回值存储在变量中。函数将只被调用一次并且变量将保留该值直到脚本执行结束(除非您手动取消设置)。你可以重复使用它,只要你想。

证明:

$count = 0;
function number() {
    global $count;
    $count++;
    return 1;
}
$initial = $count;
$var = number();
$final = $count;
printf('Function was executed %d time(s)', $final-$initial);
$initial = $count;
echo $var;
echo $var;
echo $var;
echo $var;
$final = $count;
printf('Function was executed %d time(s)', $final-$initial);

输出(不含echo输出):

Function was executed 1 time(s)
Function was executed 0 time(s)

a)试试吧。这比问快多了。

b) $var将得到number

返回的第一个结果

c)你可能会错误的lambda函数像这样每次调用都是一个新的方法调用

$var = function () { return 1};
echo $var();