2010-09-04 20 views
39

Siempre he hecho esto if($foo!==$bar) pero me di cuenta de que if($foo!=$bar) es correcto también. El doble = todavía funciona y siempre me ha funcionado, pero cada vez que busco operadores PHP no encuentro información sobre el doble = así que supongo que siempre lo he hecho mal pero funciona de todos modos. Entonces, ¿debería cambiar todos mis !== por != por el simple hecho de hacerlo?php no es igual a! = Y! ==

+1

duplicado Posible de (http [Cómo hacer la igualdad de PHP (== iguales dobles) y la identidad (=== triples iguales) operadores de comparación se diferencian?]: // stackoverflow. com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp) – nawfal

Respuesta

92

== y != no tienen en cuenta el tipo de datos de las variables que compara. Así que estos serían todos de vuelta verdad:

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

=== y !==hacer tener en cuenta el tipo de datos. Eso significa que comparar una cadena con un booleano será nunca verdadero porque son de tipos diferentes, por ejemplo. Estos serán todos return false:

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

Debe comparar los tipos de datos para las funciones que devuelven valores que podrían ser de valor ambigua Truthy/Falsy. Un ejemplo bien conocido es 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

Puede encontrar la información aquí: http://www.php.net/manual/en/language.operators.comparison.php

Es escasa, ya que no se agregó hasta PHP4. Sin embargo, lo que tienes está bien, si sabes que puede haber una diferencia de tipo, entonces es una comparación mucho mejor, ya que está probando el valor y en la comparación, no solo en el valor.

18

! == debe coincidir con el valor y tipo de datos

! = Simplemente haciendo caso omiso de coincidir con el valor del tipo de datos

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

$num == $num2; // returns true  
$num === $num2; // returns false because $num is a string and $num2 is an integer