PHP cuenta con un importante número de operadores, se puede ver una lista de los operadores discponibles aquí.
En concreto si hablamos de los operadoresde de conparación PHP cuenta con 11 diferentes.
OPERADOR | NOMBRE
---------------+------------
$a == $b | Igual
$a === $b | Idéntico
$a != $b | Diferente
$a <> $b | Diferente
$a !== $b | No idéntico
$a < $b | Menor que
$a > $b | Mayor que
$a <= $b | Menor o igual que
$a >= $b | Mayor o igual que
$a <=> $b | Nave espacial
$a ?? $b ?? $c | Fusión de null
Si nos fijamos el Operador =
es de asignación (es decir para asignar un valor) y no esta en la tabla de los operadores de comparación, ya que su función no es comparar.
¿Qué esta sucediendo cuando hacemos if($cantidad = 10) {}
?
Cuando tenemos asignaciones (=
) dentro de un condicional, estas son evaluadas antes de evaluar el condicional, es decir, primero se asigna y luego se evalua, es algo completamente válido aun que puede ser confuso, por eso no es raro encontrar código donde se asigna y evalua simultáneamente en la misma línea, aun que se desaconseja.
Ejemplos:
// esto
if($cantidad = 10) {}
// es lo mismo que esto
$cantidad = 10; // asignar valor
if($cantidad) {} // evaluar valor, var_dump((bool) $cantidad); //true
¿Cómo funciona operador de igualdad estandar ==
?
El operador de igualdad estandar compara si los valores a ambos lados del operador son iguales realizando la conversión de tipos si es necesario (tipos de variables php), podemos ver los siguientes ejemplos para entenderlo mejor:
// si alguno es numérico, convierte ambos a numérico
var_dump(1 == "1hjfitujghb"); // 1 == 1 -> true
var_dump(0 == "a"); // 0 == 0 -> true
var_dump('a' == 0); // 0 == 0 -> true
// si ambos son string numéricos, convierte ambos a numérico
var_dump("1" == "01"); // 1 == 1 -> true
// si ambos son string pero alguno no es numérico, no se realizan conversiones
var_dump("1" == "1hjf"); // 1 == 1hjf -> false
// si alguno es null o boleano, se convierten ambos lados a booleano
var_dump(null == "1hjfitujghb"); // false == true -> false
var_dump(true == "1hjfitujghb"); // true == true -> true
var_dump(false == "0"); // false == false -> true
¿Cómo funciona el operador de igualda estricto ===
?
El operador de igualdad (idéntico) comprueba que además de ser iguales los valores también sean del mismo tipo de variable (tipos de variables php). Veamos como quedan los ejemplos anteriores:
// Todos son FALSE
var_dump(1 === "1hjfitujghb"); // false
var_dump(0 === "a"); // false
var_dump('a' === 0); // false
var_dump("1" === "01"); // false
var_dump("1" === "1hjf"); // false
var_dump(null === "1hjfitujghb"); // false
var_dump(true === "1hjfitujghb"); // false
var_dump(false === "0"); // false