php-operadores-en-php

Operadores en PHP

  • 4 min

Un operador es un símbolo que realiza una operación sobre uno o varios valores.

Ya tenemos variables (datos). Ahora necesitamos hacer cosas con ellas: sumarlas, compararlas o decidir cuál usar. Para eso sirven los operadores.

Aunque muchos te resultarán familiares de las matemáticas del colegio, PHP incluye algunos caramelitos sintácticos, diseñados específicamente para resolver problemas comunes del desarrollo web.

Operadores aritméticos (los clásicos)

No nos detendremos mucho aquí, pero hay un par de detalles importantes.

OperadorNombreEjemploResultado
+Suma$a + $bSuma de valores
-Resta$a - $bDiferencia
*Multiplicación$a * $bProducto
/División$a / $bCociente (ojo: puede devolver float)
%Módulo$a % $bEl resto de la división (ideal para saber si un número es par/impar)
**Exponenciación$a ** $bPotencia (Es moderno, antes usábamos pow())

Nota de tipado: la división / devuelve un entero cuando ambos operandos son enteros y la división es exacta. En los demás casos devuelve un float; no depende de una opción de configuración.

Operadores lógicos

Sirven para tomar decisiones complejas combinando condiciones.

  • AND (&&): Ambas condiciones deben ser true.
  • OR (||): Al menos una debe ser true.
  • NOT (!): Invierte el valor (!true es false).

La trampa: && vs and

Verás que PHP permite escribir and y or (palabras completas). Consejo: usa normalmente los símbolos && y ||.

La razón es la precedencia (el orden en que se resuelven las cosas). and tiene una prioridad muy baja y puede causarte bugs silenciosos en asignaciones. Ahórrate el dolor de cabeza: usa símbolos.

El operador de fusión de null (??)

Este operador es, posiblemente, la mejor mejora de calidad de vida que ha tenido PHP.

En el desarrollo web, es muy común recibir datos que quizás existen o quizás no (por ejemplo, un parámetro opcional en una URL).

La forma antigua (El horror del isset):

// Antes de PHP 7
$nombre = isset($_GET['nombre']) ? $_GET['nombre'] : 'Invitado';
Copied!

Teníamos que repetir la variable. Era verboso y feo.

La forma moderna (??):

// Ahora
$nombre = $_GET['nombre'] ?? 'Invitado';
Copied!

¿Qué hace? Devuelve el primer operando si existe y no es null. Si no, devuelve el segundo. Es elegante, limpio y directo.

Bonus: asignación de fusión (??=)

Desde PHP 7.4, podemos hacerlo aún más corto si queremos asignar un valor por defecto a una variable solo si no tiene uno:

$config['idioma'] ??= 'es'; 
// Si $config['idioma'] no existe, le asigna 'es'. Si ya existe, no la toca.
Copied!

El operador nave espacial (<=>)

Introducido en PHP 7, su nombre oficial es Spaceship Operator. Este operador soluciona un problema muy específico: ordenar cosas.

Cuando comparamos dos valores ($a y $b) para ordenarlos, necesitamos saber tres cosas:

  1. ¿Es $a menor que $b?
  2. ¿Son iguales?
  3. ¿Es $a mayor que $b?

El operador <=> hace las tres preguntas a la vez y devuelve un número:

  • Devuelve un entero menor que 0 si $a < $b
  • Devuelve 0 si $a == $b
  • Devuelve un entero mayor que 0 si $a > $b

¿Para qué sirve esto? Para escribir funciones de ordenación personalizadas (usort) de una sola línea.

// Ordenar una lista de números de menor a mayor
$numeros = [10, 5, 20, 2];

usort($numeros, fn($a, $b) => $a <=> $b);

// Resultado: [2, 5, 10, 20]
Copied!

Sin la nave espacial, esa función de ordenación ocuparía 4 o 5 líneas de if/else.

Operadores de comparación

Finalmente, una advertencia sobre comparar valores.

  • == (Igualdad débil): PHP intentará convertir los tipos. '5' == 5 es true. Evítalo.
  • === (Identidad): Compara valor Y tipo. '5' === 5 es false. Úsalo siempre.
  • != vs !==: Lo mismo aplica para “no es igual”. Usa siempre la versión estricta !==.