Оператор PHP IF для логических значений:$var === true против $var

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

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

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

Это было полезно?

Решение

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

Другие советы

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

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

Если $variable использует 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';
}

Просто факт:

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)

Чтобы оператор if был истинным, переменная $variable должна иметь тот же тип, что и true.Другими словами, $variable не только должна принимать значение true, но также должна быть логическим значением.Итак, это две операции: проверка значений и проверка типов.

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

if($variable)

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

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

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

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top