所以我遇到了一个问题,我想出了如何解决,但我很好奇为什么。所以这是一段代码
<?php
function test($attempt=1){
if ($attempt == 5){
echo "Done!";
}else{
echo 'recursion!';
test($attempt++);
}
}
$test = test();
现在这段代码应该第一次运行,检查,进入else语句,然后再次运行测试,但这次使用$attempt++,直到最终==到5,然后它将回显完成并完成。然而这不起作用并且它永远循环。但是,可以通过在进入函数后立即将变量分配给另一个变量来修复它,如下所示
<?php
function test($attempt=1){
$nextAttempt = $attempt+1;
if ($attempt == 5){
echo "Done!";
}else{
echo 'recursion!';
test($nextAttempt);
}
}
$test = test();
有什么想法可以解释这是为什么吗?
最佳答案
您想要变量的预增量而不是后增量。这将在将变量 $attempt
作为参数传递给函数之前而不是之后增加它。
所以基本上你需要 test(++$attempt);
而不是 test($attempt++);
。
带有工作示例的沙箱:http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696
关于php - 递归无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666985/