Php 如何消除一点代码冗余

Php 如何消除一点代码冗余,php,Php,基本上我有一个代码: $response = myFunction(); 如果出现如下错误,我需要重复此呼叫: do { $response = myFunction(); } while ( isset($response['error']) ); 但是我想usleep(500)也是。我可以这样做,但我觉得没那么优雅: do { $response = myFunction(); if (isset($response['error'])) usleep(

基本上我有一个代码:

 $response = myFunction();
如果出现如下错误,我需要重复此呼叫:

do {
   $response = myFunction();

} while ( isset($response['error']) );
但是我想
usleep(500)也是。我可以这样做,但我觉得没那么优雅:

do {
   $response = myFunction();

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

} while ( isset($response['error']) );
我能做什么?也许是这样的(也不是很优雅)

编辑 还有一种可能性。。。使用
goto
。但我总是不愿意
goto
code

retry:
$response = myFunction();
if (isset($response['error'])) {
  usleep(500);
  goto retry;
}
对我来说,这似乎是最清晰和无冗余的解决方案。你觉得怎么样

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

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

话虽如此,尝试敲打一个函数直到它返回正确的结果可能是一个考虑不周的体系结构的标志,并且可能有更好的解决方案来解决整个问题。

您可以简单地定义如下函数:

function isset_wait($var)
{
    if(isset($var))
    {
        usleep(500);
        return true;
    }
    return false;
}
那么您的代码将更容易阅读:

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

建议的解决方案是在两次检查isset时删除冗余。这有点干净

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

实际上,您不能执行“!usleep(500)”操作,因为usleep()不会返回任何内容。如果这是您所需要的,那么您的代码似乎没有任何错误或不合法之处。我很好奇为什么usleep()放在第一位?我真的认为你的第一个版本(加上额外的“if”)非常清楚。巧合的是,您的条件是
isset($response['error'])
而不是一个简单的变量,但仍然是完全可读的。您可以在“if”上方添加一条注释,说明您睡眠是为了尝试后续请求。我不认为
grateate
是一个有用的标记:)我认为正式代码将使用一个明确的标志:
$retry=true;do{…;if(isset(…){usleep(500);}else{$retry=false;}}}while($retry)但尽管如此..@AymanSafadi:正是因为usleep返回void,我必须做一个
!当假设
$response
不包含键
error
时,在do中调用usleep
当没有错误时,这将抛出
E_通知
s。
do {
    $response = myFunction();
    if( $error = isset($response['error']) )
        usleep(500);
} while( $error );