Подтвердить что ты не робот

PHP - проверка на возврат false;

Просто быстрый вопрос - и я уверен, действительно базовый!

У меня есть следующий код:

function checkThings($foo, $bar) {
    ...
    if ($valid) {
        return $results;
    } else {
        return false;
    }
}

На другом конце этого я сейчас делаю

$check = checkThings($foo, $bar);
if ($check === false) {
    echo "Error";
} else {
    echo $check;
}

Записывает ли то же самое?

$check = checkThings($foo, $bar);
if (!$check) {
    echo "Error";
} else {
    echo $check;
}

Какой метод является предпочтительным, если оба правильны?

Спасибо:)

4b9b3361

Ответ 1

Оператор тройного равенства чувствителен к типу. Поэтому, когда вы проверяете:

if ($check === false)

... это будет только так, если $check является логическим значением "false". Тогда как

if ($check == false)

... не проверяет специфически для boolean false, но значение "falsey". False, в PHP, равно нулю, null является "falsey", как и пустая строка ("" == false == null, но "" !== false !== null). Итак:

$check = 0;
if ($check == false)

... имеет значение true.

Оператор префикса ! эквивалентен ==. Поэтому, когда нулевое значение должно быть дискретным значением из логического значения false, операторы ! и == не являются достаточными.

Ознакомьтесь с документами для операторов сравнения здесь: http://php.net/manual/en/language.operators.comparison.php

Лучше всего сделать ваши условные проверки максимально конкретными. Это не только для того, чтобы избежать потенциальных оплошностей в вашей логике, но и сделать код более удобным для будущих разработчиков. Представьте себе, что встречаете строку кода следующим образом:

if (check_something($variable)) {
  // do stuff
}

Я могу предположить, что функция check_something возвращает логическое значение true. Но, если я не перекопаю функцию check_something, она может также возвращать непустую строку, число... кто знает! Гораздо понятнее сделать это:

if (check_something($variable) === true) {
  // do stuff
}

Теперь, просто посмотрев, я знаю, что функция check_something ожидается, чтобы вернуть истинное значение. Возможно, я не знаю, что делает функция, но, по крайней мере, ясно, что она возвращает. Другой распространенный пример, который вы видите ВЕЗДЕ:

if (!$_GET['value']) {
  // do something
}

Это домашнее животное. Условное утверждение всегда должно четко сравнивать вещи. Итак, вы хотите сделать:

if (array_key_exists('value', $_GET) !== false && $_GET['value'] === '1') {
  // do something
}

Теперь вы можете сказать, что я не только проверяю, существует ли параметр строки запроса, но также ли он равен определенному значению.

Таким образом, единственный префикс ! и оператор == редко бывают полезны и всегда неоднозначны. Лучше всего вам писать свой код таким образом, который сам документирует или переводится на человеческий язык, чтобы выразить логику игры. Прямое сравнение с использованием !== или ===, где это уместно, является хорошей привычкой, хорошей практикой и наименее вероятным результатом непредсказуемых результатов в вашем коде.

Ответ 2

=== false проверяет тип, (! $check) оценивает значение и терпит неудачу для возвращаемых значений, таких как null, '' (пустая строка) и ноль (0)

=== наиболее правильно

Ответ 3

Они похожи, но не совсем то же самое. !$check является свободной проверкой, то есть 0 и null будет также оцениваться как true. === является строгим контролером, то есть он должен быть false.

Для более глубокого объяснения: Сравнение типов PHP

Ответ 4

Я бы предпочел ваш второй метод, но сначала положил положительную оценку (если ($ check)).

Ответ 5

== сравнивает значение, где === побито.

// will return true only when $value = false
if( $value === false )

// will return true when $value = 0, $value = "", $value = null, etc
if( $value == false )
if( !$value )