2012-06-27 2 views
3

다음 PHP 코드가 예상대로 작동합니다. 코드가 4 회에 걸쳐 명령을 실행할 수 없을 때 "복사 오류"메시지가 표시됩니다.echo for loop with exit

for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) 
{ 
    $cloudcmd = "cp abc xyz "; 
    system($cloudcmd,$status); 
    if($status != 0) 
    { 
     sleep(3) ; 
     continue ; 
    } 
    break ; 
} 

휴식 후 echo 명령을 추가하려고했습니다. 하지만 작동하지 않는 것 같습니다.

+0

휴식 후 문은 실행되지 않습니다 –

+0

'중단'의 전체 점은 루프를 종료한다는 것입니다. 실행은 그 직후에 라인에 도달하지 않습니다. – JJJ

답변

2

엄격하게, 당신은이 작업을 수행하기위한 추가 변수와 검사를 도입 할 필요가 없습니다. 간단, 당신은 루프의 외부에 한 번 루프 변수 $ num_tries의 값을 검사 할 수 있습니다 유지

:

if($num_tries==4).... 

는 또한 for 루프 후 사용할 수있는 $ 상태 변수를 가지고있다.

if($status!=0).... 
1
$success = false; 
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) 
     { 
     $cloudcmd = "cp abc xyz "; 
     system($cloudcmd,$status); 
     if($status != 0) 
      { 
      sleep(3) ; 
      continue ; 
      } 
    $success=true; 
    break ; 
    } 
if($success) 
    { 
    //do your thing 
    } 
+0

왜 변수입니까? 'break' 전에 코드를 넣을 수는 없습니까 ('$ success = true;'대신에)? – JJJ

+0

그게 내가 프로그램하고 싶은 방식이야. 그렇게하면 어떤 일이 성공하면 어떤 종류의 피드백을 여러 번 제공해야한다면 코드에서 변수를 재사용 할 수 있습니다. – Tschallacka

+3

상태 변수를 사용하지 않는 이유는 무엇입니까? –

0

break 문 루프가 중단됩니다, 루프 내에서 휴식 이후에 발생하는 모든 코드는 스킵된다.

아마, 당신이 뭔가를 할 수 있습니다 :

$success = false; 

for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) { 

    if (success()) { 
     // do something 
     $success = true; 
    } 
} 

echo ($success) ? 'Success' : 'Failure'; 
1

시도하고이 :

for ($num_tries=0;$num_tries < 4;$num_tries++) 
{ 
    system('cp abc xyz',$status); 
    if ($status === 0) 
    { 
     break; 
    } 
    sleep(3); 
} 
if ($status !== 0) 
{ 
    echo 'error'; 
} 
이 루프는 즉시 $statussystem() 호출 루프 후, 성공했다 의미 0으로 중단됩니다

에서, $status 값이 여전히 액세스 할 수 있습니다 (PHP는 블록 범위를 가지고 있지 않습니다.) 따라서 값을 확인하고 필요한 경우 에코합니다. exit()을 사용하여 echo 문을 쉽게 대체하여 나머지 스크립트를 중지 할 수 있습니다.

+0

나는 잠을 좀 자고, 내가 언급 한 '근본적인 결함'을 잊어 버렸고, 그것을 편집했다. 나는 어떤 이유로 '계속하라'진술을 간과 한 것 같다. 그래도 나는 내 제안이 타당하고, 더욱 - 우아한 접근 방식이라고 생각한다. –

1
<?php 
for($num_tries = 1 ; $num_tries <=4 ; $num_tries++){ 
    $cloudcmd = "cp abc xyz "; 
    system($cloudcmd,$status); 
    if($status != 0) { 
     if($num_tries!=4){ 
     sleep(3); 
     continue; 
     } else { 
     echo "error"; 
     } 
    }        
    break; 
} 
?>