当使用&&代替'和'时,为什么这个循环返回1?

Urd*_*rda 2 php logic gearman

while($row = mysql_fetch_assoc($result) and $runningOK)循环中捣乱我... 如果使用PHP &&运算符代替and当时mysql_fetch_assoc失败并且1在运行时只返回数字.

我已经尝试过mysql_fetch_array(),我仍然有1问题.当是时,只有当我更换&&and像目前的while说法是正确的行返回.

我在之前,之内和之后放置了调试语句来确保这一点.我想知道这是一个PHP怪癖还是我无法解释的东西.

// 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

JAL*_*JAL 9

这是由于运营商的优先权.有关详细信息,请参阅手册 ......这是相关部分.

//"&&"的优先级高于"和"

//表达式的结果(true && false)被分配给$ g
//行为如下:($ g =(true && false))

$ g = true && false;

//将常量true赋值给$ h然后忽略false
//使用类似:(($ h = true)和false)

$ h =真假;

var_dump($ g,$ h);

bool(假)
bool(true)

因此,使用&&,表达式的结果被赋值为true,其值为1.使用和,它计算mysql函数的结果 - 我想要的更多,我想.

顺便说一句,你也可以break用来消除$ runningOK变量的需要.为此,and $runningOKwhile条件中删除并更改$runningOK = FALSE;break;,如果触发了catch块,它将结束循环.

  • 谢谢!我正在庆祝冰淇淋. (2认同)