لماذا تعود هذه الحلقة 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 مشكلة. إنه عندما، وفقط عندما يستبدل && مع ال and مثل الحالي while بيان أن الصفوف الصحيحة يتم إرجاعها.

لقد وضعت تصحيح البيانات من قبل، في الداخل، وبعد تأمين هذا. أود أن أعرف ما إذا كان هذا هو Quirk 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;
    }
}
هل كانت مفيدة؟

المحلول

من المقرر أن الأسبقية للمشغل. يرى الدليل للحصول على التفاصيل ... إليك الجزء المناسب.

// "&&" له مسبق أكبر من "و"

// نتيجة التعبير (TRUE && FALSE) تم تعيينه إلى $ G
// Acts مثل: ($ g = (صحيح && false))

$ g = صحيح && false؛

// يتم تعيين صحيح ثابت إلى $ H ثم يتم تجاهل خطأ
// Acts مثل: (($ h = true) و false)

$ h = صحيح وكاذبة؛

var_dump ($ g، $ h)؛

BOOL (خطأ)
BOOL (صحيح)

لذلك، مع THE &&، يتم تعيين نتيجة التعبير إلى True، والذي يقيم إلى 1. مع وتقييم نتيجة وظيفة MySQL - أكثر ما تريد، أعتقد.

بالمناسبة، يمكنك أيضا استخدام break للقضاء على الحاجة إلى متغير US $. للقيام بذلك، إزالة and $runningOK من while الشرط والتغيير $runningOK = FALSE; ل break; وسوف ينهي الحلقة إذا تم تشغيل كتلة الصيد.

نصائح أخرى

جرب هذا:

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

قد يكون هناك مزيج، كما هو تقييم mysql_fetch_assoc($result) and $runningOK إلى TRUE، الذي يقوم عليه بعد ذلك $row, ، والتي في هذه الحالة هي نفسها 1

إذا قمت بإضافة الأقواس، فمن المحتمل أن تستخدمها أيضا && أو and, ، كما ستحصل على فصل الخصيتين بشكل صحيح.

هذا هو التأثير الجانبي في وضع الجملة البديلة أنا متأكد.

عامل التعيين = والاثنين المنطقيين && و AND لديك الأسبقية المختلفة: && يتم تنفيذها من قبل =, ، والتي بدورها يتم تنفيذها من قبل AND

لذلك في الأساس البيان:

$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_fetch_assoc قيمة) أو 0.

ذلك لأن المشغل حل الحساسة.

تحقق من هذا الجدول لفهم:

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

استخدم () بقدر ما تحتاجه عندما لا تعرف كيف تم حلها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top