2013-08-28 75 views
2

這是一個長遠的問題,但有沒有辦法在PHP中退出「if」語句並繼續到「else」語句,如果在if塊內發生錯誤?如何退出if語句並繼續其他

例如

if ($condition == "good") 
{ 
//do method one 

//error occurs during method one, need to exit and continue to else 

} 

else 
{ 
//do method two 
} 

當然是可能的,如果裏面的第一個,如果做一個嵌套的,但似乎哈克。

TIA

+0

爲什麼哈克?如果你有一堆嵌套的if,它很難管理,但一個或兩個,沒有什麼大不了 –

+5

也許你正在尋找try/catch(例外)? http://www.php.net/manual/en/language.exceptions.php – 2013-08-28 21:13:58

+0

也許你真正想要的是一個switch語句。 –

回答

6
try { 
    //do method one 

    //error occurs during method one, need to exit and continue to else 
    if ($condition != "good") { 
     throw new Exception('foo'); 
    } 
} catch (Exception $e) { 
    //do method two 

} 
+7

請解釋downvotes,這樣我們都可以學習。 – showdev

+0

我認爲downvote來自第一個版本的答案,就像'嘗試($條件!=「好」){' - 語法錯誤 –

+0

我upvoted,但仍然認爲我應該評論說,狀態標誌是一個比濫用更好的答案業務邏輯的例外情況。 @Tomas的答案是我希望在我維護的代碼中看到的答案。 – gcb

3

我只想用一個功能讓你不重複的代碼:

if ($condition == "good") { 
    //do method one 
    //error occurs during method one 
    if($error == true) { 
     elsefunction(); 
    } 
} else { 
    elsefunction(); 
} 

function elsefunction() { 
    //else code here 
} 
+0

謝謝,這實際上是我應該做的,以及我的問題的原因。 – Jamex

1

您可以修改methodOne(),使其返回true成功和false的錯誤:

if($condition == "good" && methodOne()){ 
    // Both $condition == "good" and methodOne() returned true 
}else{ 
    // Either $condition != "good" or methodOne() returned false 
} 
1

應該可以嗎? 無論如何,你可能會考慮改變它。

$error = ""; 
if ($condition == "good") { 
if (/*errorhappens*/) { $error = "somerror"; } 
} 
if (($condition != "good") || ($error != "")) { 
//dostuff 
} 
1

假設methodOne返回出錯假:

if !($condition == "good" && methodOne()) 
{ 
//do method two 
} 
0

你真的需要嗎?我認爲沒有...但你可以破解..

do{ 

    $repeat = false; 

    if ($condition == "good") 
    { 
     //do method one 
     $condition = "bad"; 
     $repeat = true; 

    }  
    else 
    { 
     //do method two 
    } 

}while($ok) ; 

我勸上的方法來分離...

0

我發現使用開關,而不是如果... else都得心應手這樣做:閉口不提break語句使交換機通過轉到下一個案例:

switch ($condition) { 
case 'good': 
    try { 
     // method to handle good case. 
     break; 
    } 
    catch (Exception $e) { 
     // method to handle exception 
     // No break, so switch continues to default case. 
    } 
default: 
    // 'else' method 
    // got here if condition wasn't good, or good method failed. 
} 
0
if ($condition == "good") { 
    try{ 
     method_1(); 
    } 
    catch(Exception $e){ 
     method_2(); 
    } 
} 
else { 
    method_2(); 
} 

function method_2(){ 
    //some statement 
} 
+0

你應該從接受的答案中學習... – sintakonte