Neden bu döngü dönüş 1 kullanırken ne zaman &&

4 Cevap php

PHP && operatör and yerine kullanılır, bu ... while($row = mysql_fetch_assoc($result) and $runningOK) döngüde, sonra da mysql_fetch_assoc başarısız me Riddle korkunç ve iadeler sadece sayı 1 çalıştırırken.

Ben denedim mysql_fetch_array() ve bir yerde ve ben hala 1 sorun var ettik. Bu zaman, ve sadece, ben doğru satır verdiğini akım while deyimi gibi bir and ile && olarak değiştirin.

Içimde, önce ayıklama ifadeleri koymuş ve bu sigorta sonra. Bu bir PHP cilvesi ya da ben hesabını veremedi şey olup olmadığını bilmek istiyorum.

// Query
$selectQuery = "SELECT * FROM jobs_cache LIMIT 20";
// Run the Selection Query.
$result = mysql_query($selectQuery)
    or die('Query Failed: '.mysql_error());

// Loop through results.
$runningOK = TRUE;
$resubmitList = array();

while($row = mysql_fetch_assoc($result) and $runningOK)
{
    // Resubmit The Job
    try
    {
        $client->addTaskBackground($row['function_name'],$row['job_data']);
        $resubmitList[] = (string)$row['job_cache_id'];
    }
    catch(Exception $e)
    {
        echo "Error adding task for job id: " . $row['job_cache_id'];
        $runningOK = FALSE;
    }
}

4 Cevap

Bu operatör önceliği nedeniyle olduğunu. Bkz the manual Detaylar için ... Burada ilgili kısmı.

// "&&" has a greater precedence than "and"

// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))

$ G = true && false;

// The constant true is assigned to $h and then false is ignored
// Acts like: (($h = true) and false)

$ H = true ve false;

var_dump ($ g, $ h);

bool(false)
bool(true)

Daha ne istiyorsun, herhalde - Yani, && ile, ifadenin sonucu bu mysql fonksiyonu sonucu değerlendirir, 1 değerlendirir, hangi gerçek atanan ile ve..

Bu arada, aynı zamanda break $ runningOK değişken için ihtiyacını ortadan kaldırmak için kullanabilirsiniz. Bunu yapmak için, while koşul ve değişim $runningOK = FALSE; break; ila and $runningOK çıkarın ve catch bloğu ise bu döngü sona erecek tetiklenir.

Bu deneyin:

while(($row = mysql_fetch_assoc($result)) and $runningOK)

O zaman $row, bu durumda, 1 ile aynı olduğu da atar ki, mysql_fetch_assoc($result) and $runningOK TRUE değerlendirilmesi gibi, bir karışım kadar olabilir

Eğer parantez eklerseniz düzgün iki değerlendirmeler ayrılmış olacak gibi, büyük olasılıkla kullanabilirsiniz && veya and.

Bu eminim alternatif sözdizimlerinden yan etkisidir.

Atama işleci = ve iki mantıksal operatörler && ve AND different precedence adres: && {önce çalıştırılır [(0)]}, sırayla AND önce yürütüldüğü

Yani temelde beyanı:

$row = mysql_fetch_assoc($result) AND $runningOK

eşittir:

($row = mysql_fetch_assoc($result)) AND $runningOK

ifadesi ise:

$row = mysql_fetch_assoc($result) && $runningOK

eşittir:

$row = (mysql_fetch_assoc($result) && $runningOK)

Ya da 0 (mysql_fetch_array bir değer dönerse) son durumda sadece değerler 1. atama.

Operatör prescedence çözme çünkü bulunuyor.

Anlamak için bu tabloyu göz atın:

http://php.net/manual/en/language.operators.precedence.php

Eğer bunu çözüme nasıl bilmiyorum zaman ihtiyacınız kadar () kullanın.