Saltar al contenido
Portada » Lenguajes » 4. Operadores y Expresiones

4. Operadores y Expresiones

En este capítulo exploraremos los operadores y expresiones, herramientas fundamentales en cualquier lenguaje de programación para manipular datos y tomar decisiones dentro de un programa. Los operadores permiten realizar cálculos, comparar valores, evaluar condiciones y construir expresiones lógicas complejas, mientras que las expresiones combinan variables, constantes y operadores para producir un valor.

Primero analizaremos los operadores básicos, como los aritméticos (para cálculos), lógicos (para decisiones) y relacionales (para comparaciones). Luego avanzaremos hacia operadores más sofisticados, como el operador ternario y el operador de fusión null, que facilitan la escritura de código conciso y eficiente. Finalmente abordaremos la precedencia de operadores, un concepto esencial para entender cómo PHP evalúa las expresiones con múltiples operadores.

¡Vamos!

Operadores Aritméticos, Lógicos y Relacionales

Los operadores son fundamentales en cualquier lenguaje de programación, incluido PHP, ya que permiten realizar cálculos matemáticos, evaluar condiciones y tomar decisiones basadas en el resultado de comparaciones o expresiones lógicas. A continuación, profundizaremos en los tres tipos de operadores: aritméticos, lógicos y relacionales, explicando sus usos, características y cómo aplicarlos con ejemplos prácticos.

Operadores Aritméticos

Los operadores aritméticos en PHP se utilizan para realizar cálculos matemáticos básicos. Estos incluyen operaciones como suma, resta, multiplicación, división, y módulo.

Operadores Básicos

OperadorDescripciónEjemploResultado
+Suma$a + $bSuma de $a y $b
-Resta$a - $bDiferencia entre $a y $b
*Multiplicación$a * $bProducto de $a y $b
/División$a / $bCociente de $a y $b
%Módulo (resto)$a % $bResto de la división de $a entre $b

Ejemplo:

<?php
$a = 10;
$b = 3;

// Operaciones aritméticas
echo "Suma: " . ($a + $b) . PHP_EOL; // Salida: 13
echo "Resta: " . ($a - $b) . PHP_EOL; // Salida: 7
echo "Multiplicación: " . ($a * $b) . PHP_EOL; // Salida: 30
echo "División: " . ($a / $b) . PHP_EOL; // Salida: 3.33333
echo "Módulo: " . ($a % $b) . PHP_EOL; // Salida: 1
?>

Operadores de Incremento y Decremento

Los operadores de incremento, decremento…, son utilizados en PHP para cambiar el valor de una variable de manera rápida y sencilla.

OperadorDescripciónEjemploResultado
++ (Prefijo)Incrementa la variable en 1 antes de devolver su valor.++$aSi $a = 5, el valor de $a se incrementa a 6 y se utiliza 6 en la expresión.
++ (Postfijo)Incrementa la variable en 1 después de devolver su valor.$a++Si $a = 5, primero se usa el valor 5 y luego $a se incrementa a 6.
-- (Prefijo)Decrementa la variable en 1 antes de devolver su valor.--$aSi $a = 5, el valor de $a se decrementa a 4 y se utiliza 4 en la expresión.
-- (Postfijo)Decrementa la variable en 1 después de devolver su valor.$a--Si $a = 5, primero se usa el valor 5 y luego $a se decrementa a 4.
+=Incrementa la variable por un valor específico.$a += 5Si $a = 5, $a se incrementa a 10 ($a = $a + 5).
-=Decrementa la variable por un valor específico.$a -= 3Si $a = 5, $a se decrementa a 2 ($a = $a - 3).
*=Multiplica la variable por un número específico.$a *= 2Si $a = 5, $a se multiplica a 10 ($a = $a * 2).
/=Divide la variable por un número específico.$a /= 2Si $a = 10, $a se divide a 5 ($a = $a / 2).
%=Asigna el módulo (resto de la división) de la variable con un número.$a %= 3Si $a = 10, $a se asigna al valor 1 ($a = $a % 3, ya que el resto de 10 / 3 es 1).

Ejemplos prácticos:

Incremento y decremento:

$a = 5;
echo ++$a; // 6
echo $a++; // 6
echo $a; // 7

Operadores de asignación compuesta:

$a = 5;
$a += 5; // $a ahora es 10
$a -= 3; // $a ahora es 7
$a *= 2; // $a ahora es 14
$a /= 7; // $a ahora es 2
$a %= 2; // $a ahora es 0 (resto de 2 / 2)

Estos operadores son bastante útiles para hacer operaciones en una sola línea de código, evitando la necesidad de escribir variables completas en cada paso.

Operadores Relacionales

Los operadores relacionales o de comparación permiten evaluar relaciones entre dos valores. Su resultado siempre es un valor booleano (true o false).

Lista de Operadores Relacionales

OperadorDescripciónEjemploResultado
==Igual a$a == $btrue si $a es igual a $b
!=Diferente de$a != $btrue si $a no es igual a $b
===Igualdad estricta (tipo y valor)$a === $btrue si $a es igual a $b y del mismo tipo
!==Desigualdad estricta$a !== $btrue si $a no es igual a $b o no es del mismo tipo
>Mayor que$a > $btrue si $a es mayor que $b
<Menor que$a < $btrue si $a es menor que $b
>=Mayor o igual que$a >= $btrue si $a es mayor o igual a $b
<=Menor o igual que$a <= $btrue si $a es menor o igual a $b

Ejemplo:

<?php
$a = 10;
$b = 5;

// Comparaciones
echo "¿$a es igual a $b? " . ($a == $b ? "Sí" : "No") . PHP_EOL; // No
echo "¿$a es mayor que $b? " . ($a > $b ? "Sí" : "No") . PHP_EOL; // Sí
echo "¿$a es igual y del mismo tipo que $b? " . ($a === $b ? "Sí" : "No") . PHP_EOL; // No
?>

Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones o expresiones. El resultado de una expresión lógica es siempre un valor booleano (true o false).

Lista de Operadores Lógicos

OperadorDescripciónEjemploResultado
&&Y lógico (AND)$a && $btrue si ambas condiciones son verdaderas
`O lógico (OR)$a ` $btrue si una de las dos variables es verdadera.
!Negación lógica (NOT)!$aInvierte el valor de $a (true a false, y viceversa)
andY lógico (AND)$a and $bSimilar a && (menor precedencia)
orO lógico (OR)$a or $bSimilar a `

Ejemplo:

<?php
$a = true;
$b = false;

// Operaciones lógicas
echo "AND lógico: " . (($a && $b) ? "Verdadero" : "Falso") . PHP_EOL; // Falso
echo "OR lógico: " . (($a || $b) ? "Verdadero" : "Falso") . PHP_EOL; // Verdadero
echo "Negación de $a: " . (!($a) ? "Verdadero" : "Falso") . PHP_EOL; // Falso
?>

Ejemplo Práctico Combinado

Problema: Determina si un número es divisible entre 3 y 5 utilizando operadores aritméticos, relacionales y lógicos.

Código:

<?php
$numero = 15;

// Verificar divisibilidad
$esDivisiblePor3 = ($numero % 3 == 0);
$esDivisiblePor5 = ($numero % 5 == 0);

if ($esDivisiblePor3 && $esDivisiblePor5) {
echo "$numero es divisible entre 3 y 5." . PHP_EOL;
} else {
echo "$numero no es divisible entre 3 y 5." . PHP_EOL;
}
?>

Explicación:
En este ejemplo, combinamos operadores aritméticos para calcular el módulo, relacionales para comparar resultados, y lógicos para evaluar si ambas condiciones son verdaderas.

Operador Ternario

El operador ternario es una forma compacta de escribir una estructura condicional if-else. Permite evaluar una expresión y devolver un valor dependiendo de si la condición es verdadera o falsa.

Sintaxis:

condición ? valor_si_verdadero : valor_si_falso;
  • Condición: Una expresión booleana que se evalúa.
  • Valor_si_verdadero: El valor que se devuelve si la condición es verdadera.
  • Valor_si_falso: El valor que se devuelve si la condición es falsa.

Ejemplo:

<?php
$edad = 18;

// Usamos el operador ternario para determinar si la persona es mayor de edad.
$mensaje = ($edad >= 18) ? "Mayor de edad" : "Menor de edad";
echo $mensaje; // Salida: "Mayor de edad"
?>

En este caso, la condición ($edad >= 18) se evalúa:

  • Si es verdadera (como lo es cuando $edad = 18), el valor "Mayor de edad" se asigna a $mensaje.
  • Si es falsa, el valor "Menor de edad" se asignaría.

Ventaja:

El operador ternario permite escribir condiciones de manera más compacta, evitando el uso de estructuras if-else más largas.

Ejemplo con valores complejos:

<?php
$nombre = "Carlos";
$saludo = !empty($nombre) ? "Hola, $nombre!" : "Hola, invitado!";
echo $saludo; // Salida: "Hola, Carlos!"
?>

Si $nombre tiene un valor (no está vacío), se saluda al nombre. Si está vacío, se saluda a «invitado».

Operador de Fusión Null (??)

El operador de fusión null es un operador más reciente en PHP (introducido en PHP 7) que permite verificar si una variable es null y, en ese caso, asignar un valor predeterminado.

Este operador es útil para evitar errores al intentar acceder a variables no definidas o que podrían ser null, y se usa principalmente para simplificar el código de comprobaciones de valores nulos.

Sintaxis:

$variable = $valor ?? $valor_predeterminado;
  • $valor: La variable que se va a comprobar.
  • $valor_predeterminado: El valor que se asignará a $variable si $valor es null.

Ejemplo:

<?php
$nombre = null;
$saludo = $nombre ?? "Invitado";
echo $saludo; // Salida: "Invitado"
?>

En este caso:

  • Como $nombre es null, el operador de fusión null asigna el valor "Invitado" a la variable $saludo.

Ejemplo con variable no nula:

<?php
$nombre = "Carlos";
$saludo = $nombre ?? "Invitado";
echo $saludo; // Salida: "Carlos"
?>

Aquí, como $nombre tiene un valor diferente de null, se asigna "Carlos" a la variable $saludo.

Ventaja:

El operador de fusión null es una forma más concisa de manejar valores nulos sin tener que escribir estructuras if más largas.

Diferencias entre el Operador Ternario y el Operador de Fusión Null

  • El operador ternario evalúa una condición y retorna uno de dos valores posibles dependiendo de si la condición es verdadera o falsa.
  • El operador de fusión null evalúa si una variable es null o no está definida, y asigna un valor por defecto si es null.

Ejemplo Comparativo:

<?php
$nombre = null;
$nombreTernario = isset($nombre) ? $nombre : "Invitado"; // Usando ternario
$nombreFusionNull = $nombre ?? "Invitado"; // Usando fusión null

echo $nombreTernario; // Salida: "Invitado"
echo $nombreFusionNull; // Salida: "Invitado"
?>

En este caso, ambos operadores devuelven "Invitado" porque $nombre es null. Sin embargo, el operador de fusión null es más limpio y conciso en este tipo de comprobaciones.

Precedencia de Operadores

En PHP, al igual que en otros lenguajes de programación, los operadores tienen un orden de precedencia que determina cómo se evalúan las expresiones complejas. Comprender este concepto es crucial para evitar errores y garantizar que tus expresiones se evalúen de la manera que esperas.

¿Qué es la precedencia de operadores?

La precedencia de operadores define el orden en el que se evalúan los operadores en una expresión con múltiples operadores. Algunos operadores, como la multiplicación (*), tienen mayor precedencia que otros, como la suma (+). Si no se entiende este orden los resultados de las operaciones pueden ser inesperados.

Además, cuando dos operadores tienen la misma precedencia, PHP utiliza las reglas de asociatividad para determinar el orden de evaluación (de izquierda a derecha o de derecha a izquierda).

Lista de Operadores por Precedencia

A continuación, se presenta un resumen de los operadores en PHP organizados de mayor a menor precedencia:

Grupo de OperadoresOperadoresDescripción
Acceso a miembros y llamadas[], (), ->, ::Usados para acceder a elementos de arreglos, invocar funciones o métodos, o acceder a miembros estáticos y de objeto.
Negación lógica y aritmética!, - (unario)Se usan para negar una expresión lógica o cambiar el signo de un número.
Multiplicación, división, módulo*, /, %Operadores aritméticos para multiplicación, división y cálculo de resto.
Suma y resta+, -Operadores aritméticos para sumar y restar valores.
Concatenación de cadenas.Usado para concatenar (unir) dos o más cadenas.
Comparación==, !=, <, <=, >, >=Operadores para comparar valores.
Operadores lógicos&&, `
Asignación=, +=, -=, *=, /=, %=Usados para asignar valores a variables y realizar operaciones de asignación compuesta.

Esta tabla te ayudará a entender cómo PHP maneja la precedencia de operadores y cómo los operadores de incremento y decremento se comparan con otros operadores en el lenguaje.

Ejemplo de Precedencia de Operadores

Considere la siguiente expresión:

<?php
$resultado = 5 + 3 * 2;
echo $resultado;
?>

Explicación:

  • Según las reglas de precedencia, la multiplicación (*) tiene mayor precedencia que la suma (+).
  • Primero se evalúa 3 * 2, que da como resultado 6.
  • Luego, se evalúa 5 + 6, dando como resultado final 11.

Salida:

11

Uso de Paréntesis para Controlar el Orden de Evaluación

Los paréntesis se pueden usar para modificar el orden de evaluación y forzar que ciertas operaciones se ejecuten primero, independientemente de la precedencia.

Ejemplo:

<?php
$resultado = (5 + 3) * 2;
echo $resultado;
?>

Explicación:

  • Los paréntesis obligan a que se evalúe primero 5 + 3, que da como resultado 8.
  • Luego, se evalúa 8 * 2, que da como resultado 16.

Salida:

16

Asociatividad de Operadores

Cuando dos operadores tienen la misma precedencia, PHP utiliza las reglas de asociatividad para determinar el orden de evaluación.

  • Asociatividad de izquierda a derecha: La mayoría de los operadores, como +, -, *, /, y los operadores de comparación, se evalúan de izquierda a derecha.

Ejemplo:

<?php
$resultado = 10 - 5 - 2;
echo $resultado;
?>

Explicación:

  • Primero se evalúa 10 - 5, que da 5.
  • Luego se evalúa 5 - 2, que da 3.

Salida:

3
  • Asociatividad de derecha a izquierda: Algunos operadores, como el de asignación (=) y el ternario (?:), se evalúan de derecha a izquierda.

Ejemplo:

<?php
$a = $b = 10;
echo $a; // Salida: 10
?>

Explicación:

  • La asignación ($b = 10) se evalúa primero, asignando 10 a $b.
  • Luego, la asignación ($a = $b) se evalúa, asignando el valor de $b (10) a $a.

Errores Comunes Relacionados con la Precedencia

Olvidar los paréntesis en expresiones complejas:

  • Un error común es asumir que las operaciones se ejecutarán en el orden en que se escriben. Por ejemplo

<?php $resultado = 5 + 10 / 2; echo $resultado; // Salida: 10 ?> 

Aquí, la división se evalúa antes que la suma debido a su mayor precedencia.

Confusión con operadores lógicos:

  • Los operadores and y or tienen menor precedencia que el operador de asignación (=). Por ejemplo

<?php $resultado = true and false; echo $resultado; // Salida: 1 (true) ?>

Esto ocurre porque la asignación (=) tiene mayor precedencia que and. La expresión se evalúa como ($resultado = true) and false.

Ejemplo Práctico

Supongamos que deseas calcular el precio total de una compra aplicando un descuento y añadiendo impuestos. Usa las reglas de precedencia y los paréntesis correctamente para evitar errores.

Código:

<?php
$precio = 100;
$descuento = 20; // 20% de descuento
$impuesto = 15; // 15% de impuesto

// Cálculo del precio final
$precioFinal = $precio - ($precio * $descuento / 100) + ($precio * $impuesto / 100);

echo "El precio final es: $precioFinal";
?>

Explicación:

  1. Primero se calcula el descuento: ($precio * $descuento / 100).
  2. Luego, se calcula el impuesto: ($precio * $impuesto / 100).
  3. Finalmente, se resta el descuento y se suma el impuesto al precio base.

Salida:

El precio final es: 115

En este capítulo, hemos explorado los operadores en PHP. Además, hemos profundiza en el concepto de precedencia y asociatividad aprendiendo cómo influyen en la evaluación de expresiones complejas.

Dominar los operadores no solo es esencial para realizar cálculos y comparaciones, sino también para escribir código eficiente, claro y sin errores. Este conocimiento te prepara para afrontar tareas más avanzadas, optimizar tus scripts y resolver problemas de manera lógica y estructurada. A medida que avancemos en el siguiente capítulo, veremos cómo estos conceptos se integran con estructuras de control para dar más dinamismo y funcionalidad a tus programas en PHP.

Ejercicio 1: Calculadora básica con operadores
Crea un archivo PHP llamado calculadora.php que realice las siguientes operaciones entre dos números dados:
Suma, resta, multiplicación, división y módulo.
Muestra cada resultado en una línea separada utilizando etiquetas HTML para mejorar la presentación.
<?php
// Declaración de variables
$num1 = 15;
$num2 = 4;

// Operaciones básicas
$suma = $num1 + $num2;
$resta = $num1 - $num2;
$multiplicacion = $num1 * $num2;
$division = $num1 / $num2;
$modulo = $num1 % $num2;

// Mostrar resultados
echo "<h2>Resultados de las operaciones básicas</h2>";
echo "Suma: $suma<br>";
echo "Resta: $resta<br>";
echo "Multiplicación: $multiplicacion<br>";
echo "División: $division<br>";
echo "Módulo: $modulo<br>";
?>

Explicación:

  • Este ejercicio refuerza el uso de operadores aritméticos para realizar cálculos básicos.
  • Los resultados se muestran de forma ordenada utilizando etiquetas HTML, lo que facilita su lectura en un navegador.
Ejercicio 2: Comparaciones con operadores relacionales y lógicos
Crea un archivo PHP llamado comparaciones.php que:
Declare tres variables: $edad, $esEmpleado y $ingresoMensual.
Verifique las siguientes condiciones:
– Si la edad es mayor o igual a 18 y es empleado.
– Si el ingreso mensual es mayor a $2000 o no es empleado.
– Si la edad es menor de 18 y no es empleado.
Muestra los resultados de cada comparación como verdadero (true) o falso (false).
<?php
// Declaración de variables
$edad = 25;
$esEmpleado = true;
$ingresoMensual = 3000;

// Condiciones con operadores relacionales y lógicos
$condicion1 = ($edad >= 18 && $esEmpleado);
$condicion2 = ($ingresoMensual > 2000 || !$esEmpleado);
$condicion3 = ($edad < 18 && !$esEmpleado);

// Mostrar resultados
echo "¿Es mayor de edad y está empleado?: " . ($condicion1 ? "true" : "false") . "<br>";
echo "¿Tiene ingresos mayores a $2000 o no es empleado?: " . ($condicion2 ? "true" : "false") . "<br>";
echo "¿Es menor de edad y no está empleado?: " . ($condicion3 ? "true" : "false") . "<br>";
?>

Explicación:

  • Este ejercicio combina operadores relacionales y lógicos para evaluar varias condiciones.
  • El uso de la función ternaria (?:) permite mostrar los resultados de manera legible.
Ejercicio 3: Operador ternario y de fusión null
Crea un archivo PHP llamado usuario.php que:
– Compruebe si la variable $usuario está definida. Si no, asígnale el valor «Invitado» utilizando el operador de fusión null (??).
– Utilice el operador ternario para determinar si el usuario es administrador ($esAdmin = true) o un usuario regular.
– Muestra el mensaje correspondiente:
– Si es administrador: «Hola, Administrador [nombre del usuario]».
– Si no: «Hola, Usuario [nombre del usuario]».
<?php
// Variables
$usuario = null; // Cambia a un nombre para probar
$esAdmin = false;

// Operador de fusión null
$usuarioFinal = $usuario ?? "Invitado";

// Operador ternario
$mensaje = $esAdmin 
    ? "Hola, Administrador $usuarioFinal." 
    : "Hola, Usuario $usuarioFinal.";

// Mostrar mensaje
echo $mensaje;
?>

Explicación:

  • El operador de fusión null (??) verifica si $usuario es null y asigna «Invitado» en ese caso.
  • El operador ternario (?:) se utiliza para decidir el mensaje basado en el valor de $esAdmin.

Bibliografía de programación en PHP.

LogoPHP. Operadores y Expresiones

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *