なぜ、&&の代わりに「と」をこのループのリターン1を使用しない場合には?

StackOverflow https://stackoverflow.com/questions/2215794

  •  19-09-2019
  •  | 
  •  

質問

これは... while($row = mysql_fetch_assoc($result) and $runningOK)ループでは、PHPの&&演算子はandの代わりに使用されているならば、mysql_fetch_assocがひどく失敗し、実行しているときにだけ番号1を返す私に謎。

私はmysql_fetch_array()と場所で試したし、私はまだ1の問題を抱えています。それはときである、とする場合にのみ、私は正しい行が返されていることを、現在の&&文のようandwhileを置き換えます。

これを保証するために、内部、および後に、前に

私は、デバッグ文を置いていました。私はこれは私がを説明することができなかった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;
    }
}

他のヒント

これを試してください:

while(($row = mysql_fetch_assoc($result)) and $runningOK)
それが、この場合にはmysql_fetch_assoc($result) and $runningOKと同じである、$rowに割り当てるTRUEに評価1、あるとして

、ミックスアップがあるかもしれません。

あなたは括弧を追加する場合は、適切に評価を2分割しているだろうとして、

、あなたが最も可能性が高い、&&またはandのいずれかを使用できます。

これは、私は確信している別の構文の副作用です。

代入演算子=と二つの論理演算子&&ANDを有します異なる優先する&&=前に実行され、順番にAND前に実行されます。

そこで、基本的声明ます:

$row = mysql_fetch_assoc($result) AND $runningOK

に等しい

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

while文ます:

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

に等しい

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

最後のケースでは、単に値1(mysql_fetch_assocが値を返す場合)または0を代入している。

オペレータがprescedenceを解決するため、

それはです。

理解するために、このページをチェックしてください:

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

あなたはそれが解決されますか分からないときに必要なだけの使用()。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top