假设以下代码:
<?php
function doStuff($rowCount) {
$rowCount++;
echo $rowCount.' and ';
return $rowCount;
}
$rowCount = 1;
echo $rowCount.' and ';
doStuff($rowCount);
doStuff($rowCount);
doStuff($rowCount);
?>
所需的输出是
1 and 2 and 3 and 4 and
实际输出是
1 and 2 and 2 and 2 and
我认为我理解“回归”在这种情况下是如何运作的。我怎么能最好地完成这个?
答案 0 :(得分:10)
您必须将doStuff
个调用的返回值分配回本地$rowCount
变量:
$rowCount = 1;
echo $rowCount.' and ';
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
或者您将变量作为reference传递,方法是将&
放在形式参数$rowCount
前面:
function doStuff(&$rowCount) {
$rowCount++;
echo $rowCount.' and ';
return $rowCount;
}
现在函数$rowCount
中的形式参数doStuff
指的是与函数调用中传递给doStuff
的变量相同的值。
答案 1 :(得分:2)
你应该试试这个:
$rowCount = 1;
echo $rowCount.' and ';
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
您的doStuff()
方法返回一个在您没有分配时只使用语句doStuff($rowCount);
时从未使用过的int。
答案 2 :(得分:1)
更改function doStuff($rowCount)
到function doStuff(&$rowCount)
通常在PHP中,您要将变量的副本发送给函数,因此函数内的修改不会影响函数外部变量的值。添加&符号告诉PHP发送对变量的引用,因此对变量的修改会传播回调用者。
答案 3 :(得分:1)
我会尝试修复代码:...
<?php
function doStuff($rowCount) {
$rowCount++;
echo $rowCount.' and ';
return $rowCount;
}
$rowCount = 1;
echo $rowCount.' and ';
doStuff(doStuff(doStuff($rowCount)));
?>
答案 4 :(得分:1)
你需要传递变量'by reference'而不是'by value'来完成这个添加&amp;到函数声明中的变量:
function doStuff(&$rowCount);