在PHP中使用try-catch如何在不抛出异常的情况下进入finally?

关于下面的代码,我怎样才能在 PHP 中不抛出异常的情况下进入finally?


try {

  $db = DataSource::getConnection();

  if (some condition here is TRUE) { 

     // go to finally without throw an exception 

  }

  $stmt = $db->prepare($sql);

  $stmt->saveMyData();

} catch (Exception $e) {

  die($e->getMessage());

} finally {

  $db = null;

}


暮色呼如
浏览 212回答 1
1回答

喵喵时光机

请不要这样做,但这里有一个选项:try {    if (TRUE){        goto ugh;    }    echo "\ndid not break";    ugh:} catch (Exception $e){    echo "\ndid catch";} finally {    echo "\ni'm so tired";}我强烈建议不要使用goto. 我认为如果您使用goto.我建议:try {    if (TRUE){        echo "\nThat's better";    } else {       echo "\ndid not break";    }} catch (Exception $e){    echo "\ndid catch";} finally {    echo "\ni'm so tired";}您只需将其余部分包装try成 anelse即可跳过它。另一种选择是声明一个 finally 函数,调用它,然后返回。//I'm declaring as a variable, as to not clutter the declared methods//If you had one method across scripts, naming it `function doFinally(){}` could work well$doFinally = function(){};try {    if (TRUE){        $doFinally();        return;    }    echo "\ndid not break";} catch (Exception $e){    echo "\ndid catch";} finally {    $doFinally();}如果您需要继续脚本,您可以声明$doFinally如下内容:$doFinally = function($reset=FALSE){    static $count;    if ($reset===TRUE){        $count = 0;        return;    } else if ($count===NULL)$count = 0;    else if ($count>0)return;}然后在finally块之后,您可以调用$doFinally(TRUE)以将其重置为下一个try/catch
打开App,查看更多内容
随时随地看视频慕课网APP