2014-07-07 62 views
0

如果出現任何錯誤,我將使用goto,並且它會從頂部重新開始。把goto換成while循環?

我也不能在函數中使用goto來跳出函數。

我知道goto是壞的,但while循環如何適合我的代碼?

例如:

$ch = curl_init(); 

retry: 

$result = curlPost($ch, "home.php", http_build_query($arg)); 

if (strpos($postResult, "Welcome") !== false) { 
    sleep(10); 
    goto retry; 
} 

$sql = "SELECT * FROM data"; 
$q = mysql_query($sql) or die(mysql_error()); 

while($row = mysql_fetch_assoc($q)) { 
    $name['something'] = $row['name']; 
    submitData($ch,$name); 
} 


function submitData($ch,$name) { 

    $result2 = curlPost($ch, "submit.php", http_build_query($name)); 

    if (strpos($postResult, "Website close") !== false) { 
     sleep(10); 
     goto retry; //goto wouldnt work. 
    } 

    // do something here 
} 
+0

它會適合比goto更好。 – Phantom

+0

@Phantom在我的示例中使用while循環回答問題。 – user1246800

回答

1

基本上,你就會有這樣的事情:

$success = false; 
while(!$success) { 
    // do stuff here 
    // psuedocode follows: 
    if failure { 
     continue; // skip remainder of `while` and retry 
    } 
    if complete { 
     $success = true; // loop will end 
     // or "break;" to exit loop immediately 
    } 
} 

要知道,如果你的「如果失敗」本身就是一個循環中,你將需要continue 2; 。或者,如果您處於嵌套循環中,則可以使用continue 3;等。

+0

謝謝,這很有幫助。我想我已經設法用'while'循環替換我的例子..你能檢查這是否正確嗎? http://pastebin.com/U5Bpkt7A – user1246800

+0

差不多。只是'錯誤'錯字'flase',你不需要'$ tryAgain'。 'submitData'邏輯重試也是倒退。 [試試這個](http://pastebin.com/yGS8Dmgv) –