Do değiştirilmesi ...

3 Cevap php

Ben curl_multi_ * girişleri PHP kılavuzuna alınan aşağıdaki kod parçası var:

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

Şimdi bir şey gerçekten döngüler ve isterim aynı gerçekleştirmek için en iyi ve kısa yolu ne olduğunu merak ederken ... yazı yapmak ister ama döngüler bu tür kullanmadan kalmamasıdır.

Şimdiye kadar ben biraz daha uzun bir versiyonu ile geldim ama ben o orijinal olarak aynı şekilde gerçekleştirir, tam olarak aynı ya da yapar emin değilim:

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

Şimdiden teşekkürler.

3 Cevap

Do..While döngüler, yakın tam While döngüler için bunlar Do..While döngü çalışmasından içinde kod sağlamak dışında at least kere vardır. Yani dönüştürmek için basit bir yol Do..While bir kez çalıştırır ve böylece Do..While kodu çekin ve While dönüştürmek için döngüler.

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

eşdeğerdir:

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

Yani değişim nasıl olacağını sizin kod uygulanır:

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

Bunu dedi, Do..While döngüler ile yanlış bir şey var ve eğer ihtiyacınız varsa bunları kullanmak gerekir.

While döngüleri yapmak ile ben bir sorun görmüyorum. Döngüler içinde kod bir koşul yerine ise en az 1 kez ve daha fazla kez idam edilmesi gereken bir şey içeriyorsa, onlar kullanılmalıdır.

IMO, ben kod sizin ilk seti net olduğunu düşünüyorum.

Bu yapacak?

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