2010-09-04 2 views
39

Я всегда делал это if($foo!==$bar), но я понял, что тоже if($foo!=$bar). Double = все еще работает и всегда работал на меня, но всякий раз, когда я ищу PHP-операторов, я не нахожу информацию о двойном =, поэтому я предполагаю, что я всегда делал это неправильно, но он работает в любом случае. Так что я должен изменить все свои !== на != только ради этого?php не равно! = И! ==

+1

Возможный дубликат (HTTP [Как сделать PHP равенства (== двойной равно) и идентичность (=== тройные Равен), операторы сравнения отличаются?]: // StackOverflow. ком/вопросы/80646 /, как-ду-The-PHP-равенство-дабл-равно-и-личность-тройным равна-Comp) – nawfal

ответ

92

== и != не учитывают тип данных переменных, которые вы сравниваете. Таким образом, они бы все вернуть верно:

'0' == 0 
false == 0 
NULL == false 

=== и !==делать принимать во внимание тип данных. Это означает, что сравнение строки с логическим будет никогда быть истинным, потому что они имеют разные типы, например. Все они будут возвращать ложь:

'0' === 0 
false === 0 
NULL === false 

Вы должны сравнить типы данных для функций, которые возвращают значения, которые могли бы быть неоднозначным truthy/falsy значения. Известным примером является 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 
0

Вы можете найти информацию здесь: http://www.php.net/manual/en/language.operators.comparison.php

Это мало, потому что он не был добавлен до PHP4. То, что у вас есть, хорошо, хотя, если вы знаете, что может быть разница в типах, то это намного лучшее сравнение, так как для сравнения используется значение и, а не просто значение.

18

! == должны соответствовать значению и типа данных

! = Просто соответствует значению, не обращая внимание от типа данных

$num = '1'; 
$num2 = 1; 

$num == $num2; // returns true  
$num === $num2; // returns false because $num is a string and $num2 is an integer 
Смежные вопросы