2010-11-02 25 views
5

duplicados posibles:
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
Reference - What does this symbol mean in PHP?
php not equal to != and !==¿Qué significan? == y === en PHP?

¿Cuáles son los !== y === operadores en este fragmento de código?

if ($a !== null) // do something 
if ($b === $a) // do something 
+8

http://www.php.net/manual/en/language.operators.comparison.php – mbeckish

+8

Es realmente desafortunado que el motor de búsqueda SO no funcione para '===' porque esta pregunta se le pregunta una vez al mes –

+0

Una de las mejores respuestas se proporciona como comentario xD –

Respuesta

6

Son operadores de comparación de tipo estricto. No solo verifican el valor sino también el tipo .

Considérese una situación en la que se comparan los números o cadenas:

if (4 === 4) // same value and type 
{ 
    // true 
} 

pero

if (4 == "4") // same value and different type but == used 
{ 
    // true 
} 

y

if (4 === "4") // same value but different type 
{ 
    // false 
} 

Esto se aplica a los objetos, así como matrices.

Así que en los casos anteriores, usted tiene que hacer la elección sensata si se debe utilizar == o ===

Es buena idea usar === cuando se está seguro sobre el tipo, así

Más información:

1

=== también comprueba el tipo de la variable.

Por ejemplo, "1" == 1 devuelve true pero "1" === 1 devuelve falso. Es particularmente útil para las funciones que pueden devolver 0 o False (strpos por ejemplo).

esto no funcionaría correctamente porque strpos devuelve 0 y 0 == false

if (strpos('hello', 'hello world!')) 

Sin embargo, esto funcionaría:

if (strpos('hello', 'hello world!') !== false) 
+0

Esta respuesta es correcta, pero voy a agregar un ejemplo. 'strpos (" abcde "," f ")' devuelve 'false', porque' f' no está en la cadena 'abcde'. Es posible que desee probar para esto, por lo que usaría 'if (strpos (" abcde "," f ") === false)'. Si simplemente hiciera 'if (! (Strpos (" abcde "," f ")))', entonces estaría en problemas si strpos realmente devolviera '0'. ¿Por qué? Porque PHP está tipeado libremente y '0'0 y' false' son equivalentes cuando no se comparan tipos también. – Brad

13

Son identidad operadores de equivalencia.

1 == 1 
1 == "1" 
1 === 1 
1 !== "1" 
true === true 
true !== "true" 
true == "true" 

Todo esto equivale a cierto. También verifique this link proporcionado por @mbeckish

+2

No lo llamaría identidad, porque dos objetos con una identidad diferente aún pueden tener el mismo valor y el mismo tipo (y ser '===' igual como tal). Simplemente no hay * identidad * en php. – poke

+0

Es el operador de equivalencia. Afirma que ambos "argumentos" (lado izquierdo y derecho) son iguales y del mismo tipo (y si un objeto, la misma clase). – ircmaxell

0

Un signo doble = es una comparación y prueba si la variable/expresión/constante a la izquierda tiene el mismo valor que la variable/expresión/constante a la derecha.

Un triple = sign es una comparación para ver si dos variables/expresiones/constantes son iguales Y tienen el mismo tipo, es decir, ambas son cadenas o ambas son números enteros.

El mismo concepto se aplica a! ==

0

Sólo se devuelven verdadero si tanto el tipo y valor de los valores dados son equivalentes. Ejemplo: 1 === 1 es cierto "1" === 1 es falso 1 === "1" es falso "1" === "1" es cierto

donde como con == todo lo anterior sería verdadero

0

Cuando utiliza dos signos iguales ==, comprobará el mismo valor.

if('1' == 1) { echo 'yes'; } 

El código anterior funciona porque tienen el mismo valor.

Pero si utiliza tres signos iguales ===, comprobará el valor y el tipo de datos.

Por lo tanto

if('1' === 1) { /* this will not work */ } 

Esto se debe a '1' tiene un tipo de datos de string mientras 1 es un integer o una number

pero que podría ser algo como esto - creo: D

if((integer) '1' === 1) { echo 'this works'; } 

Porque estamos cambiando el tipo de datos de '1' a integer

Cuestiones relacionadas