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
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
+ | Suma | $a + $b | Suma de $a y $b |
- | Resta | $a - $b | Diferencia entre $a y $b |
* | Multiplicación | $a * $b | Producto de $a y $b |
/ | División | $a / $b | Cociente de $a y $b |
% | Módulo (resto) | $a % $b | Resto 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
?>
@Tip. Fíjate en la constante predefinida PHP_EOL
. Esta constante de PHP indica el final de línea (End Of Line).
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.
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
++ (Prefijo) | Incrementa la variable en 1 antes de devolver su valor. | ++$a | Si $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. | --$a | Si $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 += 5 | Si $a = 5 , $a se incrementa a 10 ($a = $a + 5 ). |
-= | Decrementa la variable por un valor específico. | $a -= 3 | Si $a = 5 , $a se decrementa a 2 ($a = $a - 3 ). |
*= | Multiplica la variable por un número específico. | $a *= 2 | Si $a = 5 , $a se multiplica a 10 ($a = $a * 2 ). |
/= | Divide la variable por un número específico. | $a /= 2 | Si $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 %= 3 | Si $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
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
== | Igual a | $a == $b | true si $a es igual a $b |
!= | Diferente de | $a != $b | true si $a no es igual a $b |
=== | Igualdad estricta (tipo y valor) | $a === $b | true si $a es igual a $b y del mismo tipo |
!== | Desigualdad estricta | $a !== $b | true si $a no es igual a $b o no es del mismo tipo |
> | Mayor que | $a > $b | true si $a es mayor que $b |
< | Menor que | $a < $b | true si $a es menor que $b |
>= | Mayor o igual que | $a >= $b | true si $a es mayor o igual a $b |
<= | Menor o igual que | $a <= $b | true 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
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
&& | Y lógico (AND) | $a && $b | true si ambas condiciones son verdaderas |
` | O lógico (OR) | $a ` $b | true si una de las dos variables es verdadera. |
! | Negación lógica (NOT) | !$a | Invierte el valor de $a (true a false , y viceversa) |
and | Y lógico (AND) | $a and $b | Similar a && (menor precedencia) |
or | O lógico (OR) | $a or $b | Similar 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
esnull
.
Ejemplo:
<?php
$nombre = null;
$saludo = $nombre ?? "Invitado";
echo $saludo; // Salida: "Invitado"
?>
En este caso:
- Como
$nombre
esnull
, 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 Operadores | Operadores | Descripció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 resultado6
. - Luego, se evalúa
5 + 6
, dando como resultado final11
.
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 resultado8
. - Luego, se evalúa
8 * 2
, que da como resultado16
.
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 da5
. - Luego se evalúa
5 - 2
, que da3
.
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, asignando10
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
yor
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:
- Primero se calcula el descuento:
($precio * $descuento / 100)
. - Luego, se calcula el impuesto:
($precio * $impuesto / 100)
. - 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.
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
).
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]».
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
esnull
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.
- Aprende PHP desde Cero: Todo lo que necesitas para programar en PHP. Autor: Gerardo G. Urtiaga (Editorial: Editorior Independiente)
- PHP y MySQL: Domine el desarrollo de un sitio web dinámico e interactivo. Autor: Olivier Heurtel (Editorial: Ediciones ENI)
- PHP 8: Programación de aplicaciones web en el servidor: Guía paso a paso con ejemplos y proyectos prácticos. Autor: Jose Vicente Cerratlá.