0

これはおそらく SF リクエストのように聞こえるかもしれませんが、ブロックtry {}内から Exception がスローされたブロックの先頭に戻る方法はあり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 に答える