سؤال

أعرف أن هذا السؤال ليس مهما حقا. ومع ذلك كنت أتساءل:

أي مما يلي إذا كانت العبارات هي الأفضل والأسرع للاستخدام؟

<?php

$variable = true;

if($variable === true)
{
    //Something
}

if($variable)
{
    // Something
}


?>

أعرف === هو مطابقة القيمة المنطقية بالضبط. ومع ذلك هل هناك حقا أي تحسن؟

هل كانت مفيدة؟

المحلول

استخدام if ($var === true) أو if ($var) ليس مسألة نمط ولكن مسألة صحة. لان if ($var) بالضبط مثل if ($var == true). وبعد و == المقارنة لا تحقق من النوع. لذا 1 == true صحيح ولكن 1 === true هو زائف.

نصائح أخرى

بقدر السرعة، وأنا أتفق مع نيلز، ربما لا تذكر.

بقدر ما هو أفضل ما إذا كان العبارة أفضل لاختبارها، فربما يعتمد الإجابة على الصب والقيم المتوقعة التي يمكن أن يكون لها متغير.

إذا كان متغير $ يستخدم 0 و 1 كعلم حقيقي / خاطئ، إذا كان (متغير $) أو إذا كان (متغير $) من شأنه أن يعمل، ولكن إذا كانت نتيجة عدد صحيح كما في Stropos ()، فسوف تعمل مشاكل ... إذا كان ذلك ممكنا، فسوف أوصي باستخدام قيمة منطقية حقيقية بدلا من 0/1.

... ربما هذا سوف يساعد في توضيح؛ التعليق على اختلافات $ var لرؤية النتائج المختلفة.

<?php

$var = true;
$var = 1;

$var = false;
$var = 0;

if ( $var ) {
    echo 'var = true <br />';
}

if ( $var === true ) {
    echo 'var is a boolean and = true';
}

if ( !$var ) {
    echo 'var = false <br />';
}

if ( $var === false ) {
    echo 'var is a boolean and = false';
}

مجرد حقيقة:

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r == true) {} }'

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r) {} }'

والثاني هو أسرع من الأول.

أنا لست عميقا حقا في الاشياء الفنية ل PHP، ولكن في الحالة الأولى

if($variable === true)

يتغير متغير $ نفس النوع بالضبط صحيحا لبيانه الصحيح ليكون صحيحا. بمعنى آخر، لم يكن متغير $ فقط لحلها على TRUE، ولكن يجب أن تكون أيضا منطقية. لذلك هذه العمليات، التحقق من القيمة والتحقق من النوع.

في الحالة الثانية

if($variable)

يتغير $ فقط لحلها على True. لذلك يحدث فحص القيمة فقط. أنا استنتج أن ذلك يأخذ الكمبيوتر وقتا أقل قليلا.

بالتحدث عمليا: فإن الاختلافات في السرعة ربما تكون ضئيلة.

=== مفيدة حقا في StrStr / Stristr عندما تكون الإبرة الأولى في وضع 0 في كومة القش. إذا كنت لا تستخدم === أو! == هل يمكن أن يكون لديك خطأ على يديك.

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top