从异常中回归

时间:2012-06-19 06:22:17

标签: php exception exception-handling

这可能听起来像科幻请求,但是有没有办法返回try {}块的开头,在catch() {}块中抛出异常? / p>

以下是一个例子:

try
{
    // make OAuth request
}
catch(OAuthException $e)
{
    // if(){}
    // If tells me that the Exception was thrown because the access token is expired
    // I have alternative access token (that's always up to date, but there is a catch why I void using it)
    // I set it as a new access token and want to repeat the try {} block
}

显然goto可以做到这一点,但是,我正在寻找是否有更复杂的方法。

3 个答案:

答案 0 :(得分:2)

while循环。

do {
  $ok = false;
  try {
    // something
    $ok = true;
  } catch (...) {
    // something
  }
} while (!$ok);

AksharRoop和Broncha的解决方案也很不错,特别是如果您的备份计划数量有限(即您所描述的特定情况)。使用while更为通用。

答案 1 :(得分:2)

将您的try块移动到一个单独的函数,以便您可以使用新标记再次调用它。

try
{
    MakeAuthRequest(token);
}
catch(OAuthException $e)
{
    if (failedDueToToken)
    {
        MakeAuthRequest(newToken);
    }
}

答案 2 :(得分:2)

您可以将代码包装在函数内部并从catch部分调用相同的函数

function remotePost($accessToken){

  try{

  }catch(OAuthException $e){
  //the one used is not alternative token and if there is an alternative access token
    return remotePost($alternativeAccessToken);
  }
}