оценка — В чем разница между «! == false» и «== true»?

Иногда я вижу, как люди пишут такие условные утверждения:

if($var !== false) {...}

Вместо этого:

if($var == true) {...}

Это то же самое, верно?

Я вижу, что первое использовалось гораздо чаще, и мне интересно, есть ли причина этого, или это просто личное предпочтение.

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

0

Решение

Они не одинаковы.

!== это строгое сравнение, которое сравнивает значение и тип. $var должен равняться (bool) false, Это означает, что если строка «ложь» была возвращена, она потерпит неудачу.

== это свободное сравнение, которое просто проверяет значение. Это означает $var может равняться ‘(string) string’ и быть истинным. При проверке VAR, как это:

if ($var == true) {

}

Вы проверяете, если $var имеет что-нибудь в этом / определено. Пока что-то против (и не равно (bool) false) это пройдет условно. Это означает, что «(string) false» пройдет это условие.

Ничего не стоит некоторые функции (например, strpos) вернуть (bool) false поэтому первый (IMO) лучше подходит для такого рода функций.

2

Другие решения

Это:

 if($var !== false) {...}

будет иметь значение только false, если $ var точно false, Он не будет иметь значение false, если $ var — это любое другое значение, будь то «false-y» или нет.

Это:

if($var == true) {...}

будет иметь значение false для любого значения ‘false-y’. например 0, '0',

Кроме того это:

if($var === true) {...}

будет иметь значение true, только если $ var точно установлено на true, а не на другие значения «truey-y».

Таким образом, вы правы, что они одинаковы, если вы знаете, что $ var является одним из true или же false, но они ведут себя иначе для других значений.

4

$var !== false может быть использован для чего-то другого, кроме читабельности или личных предпочтений. Ожидается возвращение различных функций PHP false в случае ошибки и они могли бы также вернуть ложное значение на успех. принимать strpos например:

Возвращает положение, в котором находится игла относительно
начало строки стога сена (независимо от смещения). Также обратите внимание
эта строка начинается с 0, а не с 1.

Возвращает FALSE, если игла не была найдена.

Это означает, что функция может возвращать целое число, четное 0 если игла была найдена в начале, а также false если игла не была найдена. Вы должны использовать !== false проверить, является ли выражение falseне ложь.

3

Когда вы используете ==

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

var_dump(0==FALSE);  // ( 0 == ( int ) false  )  bool(true)
var_dump(0=='anystring'); //  ( 0 == ( int ) 'anystring' ) bool(true)

Когда вы используете ===

Он сравнивает значение и типы тоже

Так было бы что-то вроде

var_dump(  gettype( 0  )  == gettype( false  ) && 0 == false  )

Это быстрее в случае, если проверка вашего типа не удалась, так как он не должен типизировать значение для дальнейшей «проверки значения», если проверка типа не удалась.

-1
По вопросам рекламы [email protected]