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

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

Какие из следующих утверждений 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, ответ, вероятно, зависит от ожидаемого литья и значений, которые может иметь переменная $.

Если переменная $ использует 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) {} }'

Второй – быстрее первого.

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

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

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

 if($variable === true) 

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

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

 if($variable) 

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

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