Substituindo Do … While Loops

Eu tenho o seguinte código tirado do manual do PHP nas inputs curl_multi_ *:

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

Agora, o que é que eu realmente não gosto de escrever faz … enquanto faz loops e eu queria saber o que seria o melhor e mais curto caminho para realizar o mesmo, mas sem usar esse tipo de loops.

Até agora, encontrei uma versão ligeiramente mais longa, mas não tenho certeza se ela faz exatamente a mesma coisa ou se ela funciona do mesmo modo que a 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; } 

Desde já, obrigado.

Do..While loops são próximos dos Do..While exatos até, exceto que garantem o código dentro do loop Do..While que é executado pelo menos uma vez. Então, a maneira simples de converter Do..While loops é puxar o código do Do..While para que ele seja executado uma vez e converter para While .

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

é equivalente a:

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

Então, aplicado ao seu código, a mudança seria:

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

Com isso dito, não há nada de errado com Do..While loops e você deve usá-los se precisar.

Não vejo um problema com os loops while while. Eles devem ser usados ​​quando o código dentro dos loops contém algo que deve ser executado pelo menos 1 vez e mais vezes se uma condição for atendida.

IMO, acho que seu primeiro conjunto de código é mais claro.

Isso fará isso?

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