Подтвердить что ты не робот

Оператор PHP IF для булевых значений: $var === true vs $var

Я знаю, что этот вопрос не очень важен. Однако мне было интересно:

Какой из следующих операторов IF является лучшим и самым быстрым в использовании?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

Я знаю, что === соответствует точно логическому значению. Однако есть ли какие-то улучшения?

4b9b3361

Ответ 1

Использование if ($var === true) или if ($var) - это не вопрос стиля, а вопрос правильности. Потому что if ($var) совпадает с if ($var == true). И сравнение == не проверяет тип. Итак, 1 == true истинно, но 1 === true является ложным.

Ответ 2

Что касается скорости, я согласен с Нильсом, это, вероятно, незначительно.

Насколько оператор лучше всего тестировать, ответ, вероятно, зависит от ожидаемого литья и значений, которые может иметь переменная $.

Если переменная $использует 0 и 1 как флаг true/false, тогда if ($ variable) или if (! $variable) будет работать, но если это целочисленный результат, как в strpos(), вы столкнетесь с проблемами... если возможно, я бы рекомендовал использовать фактическое логическое значение, а не 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';
}

Ответ 3

Просто факт:

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) {} }'

Вторая быстрее, чем первая.

Ответ 4

=== действительно полезно в strstr/stristr, когда первая игла находится в позиции 0 в стоге сена. Если вы не используете === или! ==, у вас может быть ошибка на ваших руках.

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;

Ответ 5

Я не очень глубоко разбираюсь в технических материалах PHP, но в первом случае

if($variable === true)
переменная

$должна иметь тот же тип, что и для оператора if. Другими словами, переменная $имеет не только разрешение true, но также должно быть логическим. Так что 2 операции, проверка ценности и проверка типов.

Во втором случае

if($variable)
Переменная

$должна иметь значение true. Так происходит только проверка стоимости. Я делаю вывод, что это занимает немного меньше времени.

Практически говоря: различия в скорости, вероятно, незначительны.