2009-11-03 2 views
18

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

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

<?php 

$variable = true; 

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

if($variable) 
{ 
    // Something 
} 


?> 

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

+0

Я пробовал, и я не могу подтвердить ваше требование. –

ответ

45

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

5

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

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

Небольшой комментарий к вашему коду: я всегда буду использовать фигурные скобки {} вокруг кодового блока после оператора if. Я знаю, что это не обязательно, но имхо это хорошо для читаемости. –

4

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

if($variable === true) 

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

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

if($variable) 

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

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

7

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

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

Если переменная $ использует 0 и 1 как флаг истины/флага, тогда 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'; 
} 
7

Просто факт:

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

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

Смежные вопросы