¿En qué se diferencian los operadores de comparación PHP de igualdad (== doble igual) e identidad (=== triple igual)?

Resuelto nickf asked hace 54 años • 13 respuestas

¿ Cuál es la diferencia entre ==y ===?

  • ¿Cómo funciona exactamente la ==comparación vaga?
  • ¿Cómo funciona exactamente la ===comparación estricta?

¿Cuáles serían algunos ejemplos útiles?

nickf avatar Jan 01 '70 08:01 nickf
Aceptado

diferencia entre ==y===

La diferencia entre el ==operador vagamente igual y el ===operador estrictamente idéntico se explica exactamente en el manual :

Operadores de comparación

Ejemplo Nombre Resultado
$a == $b Igual VERDADERO si $a es igual a $b después del malabarismo de tipos.
$a === $b Idéntico VERDADERO si $a es igual a $b y son del mismo tipo.

==Comparación ligeramente igual

Si está utilizando el ==operador, o cualquier otro operador de comparación que utilice una comparación vaga como !=, <>o ==, siempre debe mirar el contexto para ver qué, dónde y por qué se convierte algo para comprender qué está sucediendo.

Reglas de conversión

  • Convirtiendo a booleano
  • Convertir a entero
  • Convirtiendo a flotante
  • Convirtiendo a cadena
  • Convirtiendo a matriz
  • Convertir a objeto
  • Convirtiendo a recurso
  • Convirtiendo a NULO

Tabla de comparación de tipos

Como referencia y ejemplo puedes ver la tabla comparativa en el manual :

VERDADERO FALSO 1 0 -1 "1" "0" "-1" NULO formación() "php" ""
VERDADERO VERDADERO FALSO VERDADERO FALSO VERDADERO VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO
FALSO FALSO VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO VERDADERO VERDADERO FALSO VERDADERO
1 VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO
0 FALSO VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO VERDADERO FALSO VERDADERO VERDADERO
-1 VERDADERO FALSO FALSO FALSO VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO
"1" VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO
"0" FALSO VERDADERO FALSO VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO
"-1" VERDADERO FALSO FALSO FALSO VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO
NULO FALSO VERDADERO FALSO VERDADERO FALSO FALSO FALSO FALSO VERDADERO VERDADERO FALSO VERDADERO
formación() FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO VERDADERO FALSO FALSO
"php" VERDADERO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO
"" FALSO VERDADERO FALSO VERDADERO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO VERDADERO

===Comparación idéntica estricta

Si está utilizando el ===operador, o cualquier otro operador de comparación que utilice una comparación estricta como !==o ===, siempre puede estar seguro de que los tipos no cambiarán mágicamente , porque no se realizará ninguna conversión. Entonces, con una comparación estricta, el tipo y el valor deben ser los mismos, no solo el valor.

Tabla de comparación de tipos

Como referencia y ejemplo puedes ver la tabla comparativa en el manual :

Comparaciones estrictas con===

VERDADERO FALSO 1 0 -1 "1" "0" "-1" NULO formación() "php" ""
VERDADERO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO
FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO
1 FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO
0 FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO
-1 FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO FALSO
"1" FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO FALSO
"0" FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO FALSO
"-1" FALSO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO FALSO
NULO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO FALSO
formación() FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO FALSO
"php" FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO FALSO
"" FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO FALSO VERDADERO

Nota del editor : esto se citó correctamente anteriormente, pero es más legible como una tabla de rebajas. Esto no es plagio

nickf avatar Sep 17 '2008 06:09 nickf

El operador == convierte entre dos tipos diferentes si son diferentes, mientras que el operador === realiza una 'comparación segura de tipos'. Eso significa que sólo devolverá verdadero si ambos operandos tienen el mismo tipo y el mismo valor.

Ejemplos:

1 === 1: true
1 == 1: true
1 === "1": false // 1 is an integer, "1" is a string
1 == "1": true // "1" gets casted to an integer, which is 1
"foo" === "foo": true // both operands are strings and have the same value

Advertencia : dos instancias de la misma clase con miembros equivalentes NO coinciden con el ===operador. Ejemplo:

$a = new stdClass();
$a->foo = "bar";
$b = clone $a;
var_dump($a === $b); // bool(false)
Patrick Glandien avatar Feb 26 '2009 07:02 Patrick Glandien