Оператор PHP IF для булевых значений: $var === true vs $var
Я знаю, что этот вопрос не очень важен. Однако мне было интересно:
Какой из следующих операторов IF является лучшим и самым быстрым в использовании?
<?php
$variable = true;
if($variable === true)
{
//Something
}
if($variable)
{
// Something
}
?>
Я знаю, что === соответствует точно логическому значению. Однако есть ли какие-то улучшения?
Ответы
Ответ 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. Так происходит только проверка стоимости. Я делаю вывод, что это занимает немного меньше времени.
Практически говоря: различия в скорости, вероятно, незначительны.