2013-08-28 47 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