Оператор PHP IF для логических значений:$var === true против $var
-
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;