递归无限循环?
Recursion infinite loop?
所以我 运行 遇到了一个问题,我想出了解决方法,但我很好奇为什么。所以这是一段代码
<?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();
关于这是为什么的任何想法?
运算符 ++ 在语句求值后执行,因此您正在执行对具有相同值的函数的调用。
test($attempt++);
等于:
test($attempt);
$attempt = $attempt + 1
你想要变量的预增量而不是 post-增量。这将在将变量 $attempt
作为参数传递给函数之前递增,而不是之后递增。
所以基本上你想要 test(++$attempt);
而不是 test($attempt++);
。
带有工作示例的沙盒:http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696
所以我 运行 遇到了一个问题,我想出了解决方法,但我很好奇为什么。所以这是一段代码
<?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();
关于这是为什么的任何想法?
运算符 ++ 在语句求值后执行,因此您正在执行对具有相同值的函数的调用。
test($attempt++);
等于:
test($attempt);
$attempt = $attempt + 1
你想要变量的预增量而不是 post-增量。这将在将变量 $attempt
作为参数传递给函数之前递增,而不是之后递增。
所以基本上你想要 test(++$attempt);
而不是 test($attempt++);
。
带有工作示例的沙盒:http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696