Рекурсия бесконечного цикла?

Поэтому я столкнулся с проблемой, которую я выяснил, как исправить, но мне очень любопытно, почему. Так вот блок кода

<?php

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

}
$test = test();

Теперь этот код должен запустите в первый раз, проверьте, перейдите к оператору else, затем снова запустите test, но на этот раз с $ try ++, пока в конечном итоге он не достигнет == до 5, а затем он будет выполнен и завершен. Однако это не работает, и это зацикливается навсегда. Однако это можно исправить, присвоив переменную другой переменной сразу после входа в функцию, например, так

<?php

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

}
$test = test();

Есть идеи, почему это так?

2

Решение

Вы хотите преинкремент вместо постинкремент переменной. Это увеличит переменную $attempt перед передачей в качестве аргумента функции, а не после.

Так что в основном вы хотите test(++$attempt); вместо test($attempt++);,

Песочница с рабочим примером: http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696

4

Другие решения

Оператор ++ выполняется после вычисления предложения, поэтому вы выполняете вызов функции с одинаковым значением.

test($attempt++);

это то же самое, что:

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

По вопросам рекламы [email protected]