如何删除一些代码冗余

时间:2011-12-22 12:09:32

标签: php

基本上我有一个代码:

 $response = myFunction();

如果出现这样的错误,我需要重复此调用:

do {
   $response = myFunction();

} while ( isset($response['error']) );

但如果出现错误,我也希望usleep(500);。我可以这样做,但我觉得它不那么优雅:

do {
   $response = myFunction();

   if (isset($response['error']))
     usleep(500);

} while ( isset($response['error']) );

我该怎么办?也许这样的事情(不是很优雅)

while( isset($response['error']) && !usleep(500) );

修改

还有另一种可能性......使用goto。但我总是不愿意goto代码

retry:
$response = myFunction();
if (isset($response['error'])) {
  usleep(500);
  goto retry;
}

对我而言,这似乎是最清晰,最无冗余的解决方案。你觉得怎么样?

3 个答案:

答案 0 :(得分:5)

while (true) {
    $response = myFunction();

    if (isset($response['error'])) {
        usleep(500);
    } else {
        break;
    }
}

话虽如此,试图敲击函数直到它返回正确的结果可能是一个经过深思熟虑的架构的标志,并且可能有一个更好的解决方案来开始整个问题。

答案 1 :(得分:1)

建议的解决方案,以删除检查isset两次的冗余。这有点清洁。

do {
    $response = myFunction();
    if( $error = isset($response['error']) )
        usleep(500);
} while( $error );

答案 2 :(得分:0)

你可以简单地定义一个这样的函数:

function isset_wait($var)
{
    if(isset($var))
    {
        usleep(500);
        return true;
    }
    return false;
}

然后你的代码将更容易阅读:

do {
    $response = myFunction();
} while ( isset_wait($response['error']) );