Я всегда делал это if($foo!==$bar)
, но я понял, что if($foo!=$bar)
тоже правильный. Двойной =
по-прежнему работает и всегда работал у меня, но всякий раз, когда я ищу PHP-операторов, я не нахожу информацию о double =
, поэтому я предполагаю, что я всегда делал это неправильно, но он работает в любом случае. Так что я должен изменить все мои !==
на !=
только ради этого?
Php не равно!= и! ==
Ответ 1
==
и !=
не учитывают тип данных переменных, которые вы сравниваете. Таким образом, все они верны:
'0' == 0
false == 0
NULL == false
===
и !==
do учитывать тип данных. Это означает, что сравнение строки с логическим будет никогда быть истинным, потому что они имеют разные типы, например. Все они вернут 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
Ответ 2
! == должен соответствовать значению и типу данных
!= просто соответствует значению, игнорирующему тип данных
$num = '1';
$num2 = 1;
$num == $num2; // returns true
$num === $num2; // returns false because $num is a string and $num2 is an integer
Ответ 3
$a !== $b
ИСТИНА, если $a
не равно $b
, или они не одного типа
Обратитесь к http://php.net/manual/en/language.operators.comparison.php
Ответ 4
Вы можете найти информацию здесь: http://www.php.net/manual/en/language.operators.comparison.php
Это мало, потому что он не был добавлен до PHP4. То, что у вас есть, хорошо, хотя, если вы знаете, что может быть разница в типе, то это гораздо лучшее сравнение, поскольку оно тестирует значение и тип в сравнении, а не только значение.