Я всегда делал это, if($foo!==$bar)
но я понял, что if($foo!=$bar)
тоже правильно. Double =
все еще работает и всегда работал на меня, но всякий раз, когда я ищу PHP-операторов, я не нахожу информацию о double =
поэтому я предполагаю, что я всегда делал это неправильно, но он работает в любом случае. Так что я должен изменить все мои !==
to !=
Только ради этого?
==
и !=
не учитывайте тип данных переменных, которые вы сравниваете. Таким образом, все они вернутся:
'0' == 0 false == 0 NULL == false
===
и !==
учитывают тип данных. Это означает, что сравнение строки с булевым никогда не будет истинным, потому что они имеют разные типы, например. Все они вернут false:
'0' === 0 false === 0 NULL === false
Вы должны сравнивать типы данных для функций, возвращающих значения, которые могут иметь неоднозначное значение правды / фальшивости. Известным примером является strpos()
:
// This returns 0 because F exists as the first character, but as my above example, // 0 could mean false, so using == or != would return an incorrect result var_dump(strpos('Foo', 'F') != false); // bool(false) var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned
! == должен соответствовать значению и типу данных
! = просто соответствует значению, игнорирующему тип данных
$num = '1'; $num2 = 1; $num == $num2; // returns true $num === $num2; // returns false because $num is a string and $num2 is an integer
$a !== $b
TRUE, если $a
не равно $b
, или они не одного типа
См. http://php.net/manual/en/language.operators.comparison.php
Вы можете найти информацию здесь: http://www.php.net/manual/en/language.operators.comparison.php
Это мало, потому что он не был добавлен до PHP4. То, что у вас есть, хорошо, хотя, если вы знаете, что может существовать разность типов, то это гораздо лучшее сравнение, так как это тестирование значения и типа в сравнении, а не просто значение.