2009-11-03 4 views
0

Je le morceau de code ci-dessous du manuel PHP sur les curl_multi_ * entrées:... Est-ce While

$active = null; 

do { 
    $process = curl_multi_exec($curl, $active); 
} while ($process === CURLM_CALL_MULTI_PERFORM); 

while (($active >= 1) && ($process === CURLM_OK)) 
{ 
    if (curl_multi_select($curl, 3) != -1) 
    { 
     do { 
      $process = curl_multi_exec($curl, $active); 
     } while ($process === CURLM_CALL_MULTI_PERFORM); 
    } 
} 

Maintenant, la chose est que je n'aime vraiment pas écrit faire ... tandis que les boucles et je me demandais ce qui serait le meilleur et le plus court chemin pour accomplir la même chose, mais sans utiliser ce genre de boucles.

Jusqu'à présent, je suis venu avec une version un peu plus longue, mais je ne sais pas si elle fait exactement la même ou si elle effectue la même manière que l'original:

while (true) 
{ 
    $active = 1; 
    $process = curl_multi_exec($curl, $active); 

    if ($process === CURLM_OK) 
    { 
     while (($active >= 1) && (curl_multi_select($curl, 3) != -1)) 
     { 
      $process = CURLM_CALL_MULTI_PERFORM; 

      while ($process === CURLM_CALL_MULTI_PERFORM) 
      { 
       $process = curl_multi_exec($curl, $active); 
      } 
     } 

     break; 
    } 

    else if ($process === CURLM_CALL_MULTI_PERFORM) 
    { 
     continue; 
    } 

    break; 
} 

Merci à l'avance .

+10

Um ... qu'est-ce qui ne va pas avec do ... while() boucles? Plus précisément, la première version est claire et vous la remplacez par une boucle while (true)? À quelle fin? – cletus

+1

Bien que je trouve les boucles do_while archaïques, je suis d'accord avec Cletus - il n'y a aucun avantage à changer pour une boucle WHILE. Je peux voir si vous utilisez la contre-manipulation pour passer de WHILE à FOR, mais c'est tout ... –

+0

Qui a peur du do while? ;) – Frankie

Répondre

5

Do..While boucles sont près exacte While boucles, sauf qu'ils assurent le code dans la boucle Do..While exécute une fois au moins. Donc, la façon simple de convertir Do..While boucles est de sortir le code de la Do..While de sorte qu'il s'exécute une fois et convertir en While.

do { 
    action(); 
} while(...) 

équivaut à:

action(); 
while(...) { 
    action(); 
} 

donc appliqué à votre code le changement ressemblerait à ceci:

$active = null; 

$process = curl_multi_exec($curl, $active); 
while ($process === CURLM_CALL_MULTI_PERFORM) { 
    $process = curl_multi_exec($curl, $active); 
} 

while (($active >= 1) && ($process === CURLM_OK)) 
{ 
    if (curl_multi_select($curl, 3) != -1) 
    { 
     $process = curl_multi_exec($curl, $active); 
     while ($process === CURLM_CALL_MULTI_PERFORM) { 
      $process = curl_multi_exec($curl, $active); 
     }; 
    } 
} 

Cela dit, il n'y a rien de mal à Do..While boucles et vous devez utiliser si tu en as besoin.

8

Je ne vois pas de problème avec les boucles while. Ils devraient être utilisés lorsque le code dans les boucles contient quelque chose qui devrait être exécuté au moins une fois et plusieurs fois si une condition est remplie. OMI, je pense que votre premier ensemble de code est plus clair.

1

Est-ce que cela va?

$active = null; 

$process = curl_multi_exec($curl, $active); 
while ($process === CURLM_CALL_MULTI_PERFORM) { 
    $process = curl_multi_exec($curl, $active); 
}; 

$process = curl_multi_exec($curl, $active); 
while (($active >= 1) && ($process === CURLM_OK)) { 
    if (curl_multi_select($curl, 3) != -1) { 
     while ($process === CURLM_CALL_MULTI_PERFORM) { 
      $process = curl_multi_exec($curl, $active); 
     } 
    } 
}