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

Я столкнулся с этой ошибкой, но исправлять его путем добавления элемента к системному web\httpHandler разделу моего web.config файла. Я добавил следование:

<add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
24
задан MarioRicalde 3 November 2009 в 21:07
поделиться

5 ответов

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

60
ответ дан 28 November 2019 в 22:16
поделиться

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

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

Если $ переменная использует 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';
}
8
ответ дан 28 November 2019 в 22:16
поделиться

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

if($variable === true)

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

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

if($variable)

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

С практической точки зрения: разница в скорости, вероятно, незначительна.

6
ответ дан 28 November 2019 в 22:16
поделиться

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

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
5
ответ дан 28 November 2019 в 22:16
поделиться

Просто факт:

Время PHP -R '$ r = true; для ($ i = 0; $ i <10000000; $ i ++) {Если ($ r == true) {}} '

время PHP -R' $ r = true; для ($ i = 0; $ i <10000000; $ i ++) {Если ($ r) {}} '

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

7
ответ дан 28 November 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: