0

不过,这可能听起来像是一个科幻请求——有没有办法返回到从try {}块内抛出异常的块的开头catch() {}

这是一个例子:

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可以做到,不过,我正在寻找是否有更复杂的方法。

4

3 回答 3

2

一个while循环。

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

AksharRoop 和 Broncha 的解决方案也很好,特别是如果您的备份计划数量有限(即针对您描述的特定场景)。使用while更一般。

于 2012-06-19T06:24:57.030 回答
2

将您的 try 块移动到单独的函数中,以便您可以使用新令牌再次调用它。

try
{
    MakeAuthRequest(token);
}
catch(OAuthException $e)
{
    if (failedDueToToken)
    {
        MakeAuthRequest(newToken);
    }
}
于 2012-06-19T06:25:05.170 回答
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);
  }
}
于 2012-06-19T06:25:25.467 回答