Operadores de Comparaci贸n

Operadores de Comparaci贸n

Los operadores de comparaci贸n, como su nombre indica, le permiten comparar dos valores. Puede que tambi茅n se encuentre interesado en consultar las tablas de comparaci贸n de tipos, ya que 茅stas muestran ejemplos de varios tipos de comparaciones relacionadas con tipos.

Tabla 15-4. Operadores de Comparaci贸n

EjemploNombreResultado
$a == $bIgualTRUE si $a es igual a $b.
$a === $bId茅ntico TRUE si $a es igual a $b, y son del mismo tipo. (A partir de PHP 4)
$a != $bDiferenteTRUE si $a no es igual a $b.
$a <> $bDiferenteTRUE si $a no es igual a $b.
$a !== $bNo id茅nticos TRUE si $a no es igual a $b, o si no son del mismo tipo. (A partir de PHP 4)
$a < $bMenor queTRUE si $a es escrictamente menor que $b.
$a > $bMayor queTRUE si $a es estrictamente mayor que $b.
$a <= $bMenor o igual queTRUE si $a es menor o igual que $b.
$a >= $bMayor o igual queTRUE si $a es mayor o igual que $b.

Si compara un entero con una cadena, la cadena es convertida a un n煤mero. Si compara dos cadenas num茅ricas, ellas son comparadas como enteros. Estas reglas tambi茅n se aplican a la sentencia switch.

<?php
var_dump
(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true

switch ("a") {
case
0:
    echo
"0";
    break;
case
"a": // nunca se ejecuta ya que "a" ya ha coincidido con 0
    
echo "a";
    break;
}
?>

Para varios tipos, la comparaci贸n se realiza de acuerdo con la siguient tabla (en orden).

Tabla 15-5. Comparaci贸n con Varios Tipos

Tipo del Operando 1Tipo del Operando 2Resultado
null o stringstringConvertir NULL a "", comparaci贸n num茅rica o de l茅xico
bool o nullcualquieraConvertir a bool, FALSE < TRUE
objectobject Las clases internas pueden definir su propia comparaci贸n, clases diferentes son incomparables, la misma clase - comparan propiedades en la misma forma que las matrices (PHP 4), PHP 5 tiene su propia explicaci贸n
string, resource o numberstring, resource o numberTraducir las cadenas y recursos a n煤meros, matem谩tica usual
arrayarray Una matriz con menos elementos es menor, si una clave del operando 1 no se encuentra en el operando 2 entonces las matrices son incomparables, de otra forma - comparar valor por valor (vea el siguiente ejemplo)
arraycualquieraarray es siempre mayor
objectcualquieraobject es siempre mayor

Ejemplo 15-2. Transcripci贸n de la comparaci贸n de matrices est谩ndar

<?php
// Las matrices son comparadas de esta forma con los operadores de comparacion estandar
function comparacion_matrices_estandar($op1, $op2)
{
    if (
count($op1) < count($op2)) {
        return -
1; // $op1 < $op2
    
} elseif (count($op1) > count($op2)) {
        return
1; // $op1 > $op2
    
}
    foreach (
$op1 as $clave => $val) {
        if (!
array_key_exists($clave, $op2)) {
            return
null; // incomparable
        
} elseif ($val < $op2[$clave]) {
            return -
1;
        } elseif (
$val > $op2[$clave]) {
            return
1;
        }
    }
    return
0; // $op1 == $op2
}
?>

Vea tambi茅n strcasecmp(), strcmp(), Operadores de matriz, y la secci贸n del manual sobre Tipos.

Operador Ternario

Otro operador condicional es el operador "?:" (o ternario).

Ejemplo 15-3. Asignaci贸n de un valor predeterminado

<?php
// Ejemplo de uso de: el Operador Ternario
$accion = (empty($_POST['accion'])) ? 'predeterminada' : $_POST['accion'];

// La sentencia anterior es identica a este bloque if/else
if (empty($_POST['accion'])) {
    
$accion = 'predeterminada';
} else {
    
$accion = $_POST['accion'];
}

?>
La expresi贸n (expr1) ? (expr2) : (expr3) eval煤a a expr2 si expr1 eval煤a a TRUE, y expr3 si expr1 eval煤a a FALSE.

Nota: Por favor note que el operador ternario es una sentencia, y que no eval煤a a una variable, sino al resultado de una sentencia. Es importante saber esto si se desea devolver una variable por referencia. La sentencia return $var == 42 ? $a : $b; en una funci贸n con retorno-por-referencia no funcionar谩 por lo que se ha mencionado y una advertencia es generada en versiones posteriores de PHP.