Иногда я вижу, как люди пишут такие условные утверждения:
if($var !== false) {...}
Вместо этого:
if($var == true) {...}
Это то же самое, верно?
Я вижу, что первое использовалось гораздо чаще, и мне интересно, есть ли причина этого, или это просто личное предпочтение.
Я ценю, что это может быть основано на мнении, но мне любопытно посмотреть, есть ли законная причина этого.
Они не одинаковы.
!==
это строгое сравнение, которое сравнивает значение и тип. $var
должен равняться (bool) false
, Это означает, что если строка «ложь» была возвращена, она потерпит неудачу.
==
это свободное сравнение, которое просто проверяет значение. Это означает $var
может равняться ‘(string) string’ и быть истинным. При проверке VAR, как это:
if ($var == true) {
}
Вы проверяете, если $var
имеет что-нибудь в этом / определено. Пока что-то против (и не равно (bool) false
) это пройдет условно. Это означает, что «(string) false» пройдет это условие.
Ничего не стоит некоторые функции (например, strpos
) вернуть (bool) false
поэтому первый (IMO) лучше подходит для такого рода функций.
Это:
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
, но они ведут себя иначе для других значений.
$var !== false
может быть использован для чего-то другого, кроме читабельности или личных предпочтений. Ожидается возвращение различных функций PHP false
в случае ошибки и они могли бы также вернуть ложное значение на успех. принимать strpos
например:
Возвращает положение, в котором находится игла относительно
начало строки стога сена (независимо от смещения). Также обратите внимание
эта строка начинается с 0, а не с 1.Возвращает FALSE, если игла не была найдена.
Это означает, что функция может возвращать целое число, четное 0
если игла была найдена в начале, а также false
если игла не была найдена. Вы должны использовать !== false
проверить, является ли выражение false
не ложь.
Когда вы используете ==
Во-первых, он типизирует переменную и сравнивает те же значения.
Вы можете увидеть в следующем примере
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 )
Это быстрее в случае, если проверка вашего типа не удалась, так как он не должен типизировать значение для дальнейшей «проверки значения», если проверка типа не удалась.