Поэтому я столкнулся с проблемой, которую я выяснил, как исправить, но мне очень любопытно, почему. Так вот блок кода
<?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();
Есть идеи, почему это так?
Вы хотите преинкремент вместо постинкремент переменной. Это увеличит переменную $attempt
перед передачей в качестве аргумента функции, а не после.
Так что в основном вы хотите test(++$attempt);
вместо test($attempt++);
,
Песочница с рабочим примером: http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696
Оператор ++ выполняется после вычисления предложения, поэтому вы выполняете вызов функции с одинаковым значением.
test($attempt++);
это то же самое, что:
test($attempt);
$attempt = $attempt + 1