这可能听起来像科幻请求,但是有没有办法返回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
可以做到这一点,但是,我正在寻找是否有更复杂的方法。
答案 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);
}
}