递归无限循环?

时间:2016-06-06 21:14:06

标签: php recursion pass-by-reference pass-by-value

所以我遇到了一个问题,我想出了如何修复,但我很好奇为什么。所以这是一段代码

<?php

function test($attempt=1){
    if ($attempt == 5){
        echo "Done!";    
    }else{
        echo 'recursion!';
        test($attempt++);
    }

}
$test = test();

现在这个代码应该第一次运行,检查,进入else语句然后再次运行test但是这次使用$ attempt ++直到最终它是==到5然后它将回显完成并完成。然而,这不起作用,它永远循环。但是,可以通过在输入函数后立即将变量分配给另一个变量来修复它,如此

<?php

function test($attempt=1){
    $nextAttempt = $attempt+1;
    if ($attempt == 5){
        echo "Done!";    
    }else{
        echo 'recursion!';
        test($nextAttempt);
    }

}
$test = test();

为什么会这样?

2 个答案:

答案 0 :(得分:4)

您希望预先增量而不是变量的后增量。这将增加变量$attempt,然后将其作为参数传递给函数而不是之后。

所以基本上你想要test(++$attempt);而不是test($attempt++);

沙箱与工作示例:http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696

答案 1 :(得分:1)

运算符++在评估句子后执行,因此您正在执行对具有相同值的函数的调用。

test($attempt++);

与:

相同
test($attempt);
$attempt = $attempt  + 1