2016-06-06 3 views
2

그래서 문제를 해결하는 방법을 찾았지만 그 이유에 대해 궁금합니다. 그래서 여기재귀 무한 루프?

<?php 

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

} 
$test = test(); 

지금이 코드 다음 다시 테스트를 실행 else 문에 가서 확인을 처음 실행해야 코드 블록 만 $ 시도 이번에는 ++ 결국 전까지는 5 ==한다 그 다음에 완료되고 완료됩니다. 그러나 이것은 효과가 없으며 영원히 반복됩니다. 그러나 함수를 입력 한 직후에 변수를 다른 변수에 할당하면이 문제를 해결할 수 있습니다.

<?php 

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

} 
$test = test(); 

이유에 대한 의견이 있으십니까?

+0

, 당신은 설정'$ 테스트 = 테스트()'() 테스트 '이후, 아무것도하지 않는 것을 깨닫게의'를 반환하지 않습니다 가치? –

답변

4

당신은 선행 증가하는 대신 변수의 사후 증가를 원하는 :

test($attempt++); 

는보다 동일합니다. 변수 $attempt을 증가시킨 후 함수 대신 인수로 전달합니다.

기본적으로 test($attempt++); 대신 test(++$attempt);이 필요합니다. 작업 예와

샌드 박스 : 또한 http://sandbox.onlinephpfunctions.com/code/c50731815588d55bd079e701f1c5dde9e7148696

+1

오늘 나는 배웠다. – CMOS

+0

나 자신을보기 위해 나에게 약간의 분이 걸리게했다, 그것은 너무나 명백한 무엇인가 아니다 ;-) 도움이되기 때문에 기쁜! – Qirel

+1

적절한 디버깅 설정 (예 : xdebug)을 통해 코드를 단계별 실행하면 쉽게 이러한 문제를 파악할 수 있습니다. – georaldc

1

연산자 ++는 문장을 평가 한 후에 실행되므로 동일한 값을 가진 함수에 대한 호출이 실행됩니다.

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