如何删除一点代码冗余


How to remove a little code redundancy

基本上我有一个代码:

 $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;
}

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

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

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

建议的解决方案,以消除两次检查 isset 的冗余。这有点干净。

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

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

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

那么你的代码将更容易阅读:

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