代码之家  ›  专栏  ›  技术社区  ›  Urda Gael Fraiteur

为什么在使用&&而不是“and”时,此循环返回1?

  •  2
  • Urda Gael Fraiteur  · 技术社区  · 16 年前

    给我猜这个谜语。。。在 while($row = mysql_fetch_assoc($result) and $runningOK) 循环,如果PHP && 运算符用于代替 and 然后 mysql_fetch_assoc 1 跑步的时候。

    我试过了 mysql_fetch_array() 而且在适当的地方,我仍然拥有 1. && 带着 和 while 语句返回正确的行。

    // 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 回复  |  直到 13 年前
        1
  •  9
  •   Community Mohan Dere    6 年前

    the manual 有关详细信息。。。以下是相关部分。

    //“&&”优先于 “和”


    //行为方式如下:($g=(true&&假的)

    //常量true被指定给$h,然后忽略false
    //行为类似:($h=true)和false)

    布尔(假)
    布尔(真)

    顺便说一下,你也可以使用 break 不需要$runningOK变量。要执行此操作,请删除 and $runningOK 从 while 条件与变化 $runningOK = FALSE; break; 如果触发了catch块,它将结束循环。

        2
  •  1
  •   Tyler Carter    16 年前

    试试这个:

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

    正如它正在评估的那样,可能会出现混乱 mysql_fetch_assoc($result) and $runningOK 为真,然后分配给 $row ,在本例中与 1

    如果添加括号,则最有可能使用 && and ,因为您将正确地分隔这两个评估。

    我敢肯定,这是另类语法的副作用。

        3
  •  1
  •   Anax    16 年前

    = 和两个逻辑运算符 && 和 AND 有 different precedence : && 被执行之前 及

    因此,基本上,声明:

    $row = mysql_fetch_assoc($result) AND $runningOK
    

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

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

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

    在最后一种情况下,您只是分配值1(如果mysql\u fetch\u assoc返回一个值)或0。

        4
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    15 年前

    是因为接线员解决了问题。

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

    当您不知道如何解决()时,尽可能多地使用()。

    推荐文章