2012-06-27 92 views
3

以下PHP代碼按預期工作。當代碼無法以4次嘗試執行命令時,我需要回顯「複製錯誤」消息。退出循環回顯

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

我試圖在break後添加echo命令;但它似乎並不奏效。

+0

中斷後,語句不會執行 –

+0

'break'的整點是它退出循環。執行後永遠不會立即到達該行。 – JJJ

回答

2

嚴格來說,你並不需要引入額外的變量和檢查,以做到這一點。

保持簡單,你可以一次外檢查的for循環變量$ num_tries值的for循環:

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'; 
} 

這個循環將盡快$status是0,這意味着system()調用是成功的,在循環後斷裂,$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; 
} 
?>