PHP
Tutorial PHP: Operadores y expresiones
PHP: Aprenda a usar operadores aritméticos, lógicos y relacionales para manipular datos y controlar flujo de programas eficientemente.
Aprende PHP GRATIS y certifícateOperadores aritméticos, lógicos y relacionales
Los operadores en PHP son símbolos que permiten realizar operaciones sobre variables y valores. Los operadores se clasifican en aritméticos, lógicos y relacionales, y son fundamentales para construir expresiones y controlar el flujo del programa.
Los operadores aritméticos se utilizan para realizar operaciones matemáticas básicas. Por ejemplo, el operador de suma (+
) permite agregar dos valores numéricos:
$a = 10;
$b = 5;
$resultado = $a + $b; // $resultado es 15
Además de la suma, PHP ofrece operadores para resta (-
), multiplicación (*
), división (/
), módulo (%
) y exponenciación (**
). El operador de módulo devuelve el resto de la división entre dos números:
$resto = $a % $b; // $resto es 0 porque 10 es divisible por 5
Los operadores lógicos se emplean para combinar expresiones booleanas y tomar decisiones basadas en múltiples condiciones. Los operadores lógicos principales son &&
(AND), ||
(OR) y !
(NOT). Por ejemplo, para verificar si un número es mayor que cero y menor que diez:
$numero = 7;
$esValido = ($numero > 0) && ($numero < 10); // $esValido es true
El operador &&
devuelve true solo si ambas condiciones son verdaderas. El operador ||
devuelve true si al menos una de las condiciones es verdadera:
$esValido = ($numero < 0) || ($numero > 100); // $esValido es false
Para poder mostrar el resultado de un booleano, ya sea por terminal o en la página del servidor donde lanzamos la aplicación de PHP, utilizamos la función var_export($esValido)
, ya que al hacer echo
de manera normal, si el valor del booleano es True, no muestra ningún valor en pantalla, en cambio con la función var_export
, puedes ver el valor que tiene el booleano:
echo $esValido; // Como resultado mostrará: "" si es True o "1" si es False
var_export($esValidoOR); // Como resultado mostrará: "True" o "False" dependiendo de la expresión
Los operadores relacionales permiten comparar valores y determinar la relación entre ellos. Los operadores más comunes son ==
(igual a), !=
(distinto de), >
(mayor que), <
(menor que), >=
(mayor o igual que) y <=
(menor o igual que):
$a = 5;
$b = 3;
$esMayor = $a > $b; // $esMayor es true
Es importante distinguir entre ==
y ===
. El operador ==
verifica si dos valores son iguales después de la conversión de tipos, mientras que ===
comprueba si son iguales y del mismo tipo:
$valor1 = 5; // entero
$valor2 = '5'; // cadena
$comparacion1 = $valor1 == $valor2; // true
$comparacion2 = $valor1 === $valor2; // false
El operador de nave espacial (<=>
) es una adición útil que permite comparar dos expresiones en una sola operación. Devuelve -1
si el primer operando es menor, 0
si son iguales y 1
si es mayor:
$resultado = $a <=> $b; // $resultado es 1 porque $a es mayor que $b
Al combinar operadores, es crucial tener en cuenta la precedencia y el uso de paréntesis para garantizar que las expresiones se evalúen en el orden deseado. Por ejemplo:
$valor = 5 + 3 * 2; // $valor es 11
$valor = (5 + 3) * 2; // $valor es 16
Los operadores de asignación combinados permiten simplificar el código al realizar una operación y asignar el resultado en una sola expresión. Por ejemplo, para incrementar una variable:
$contador = 0;
$contador += 1; // Equivalente a $contador = $contador + 1;
Finalmente, los operadores de incremento (++
) y decremento (--
) modifican el valor de una variable numérica en uno. Pueden utilizarse en forma prefija o postfija, lo que afecta el momento en que se realiza la operación:
$a = 5;
$b = ++$a; // $a es 6, $b es 6
$c = $a--; // $a es 5, $c es 6
Comprender el uso correcto de los operadores aritméticos, lógicos y relacionales es esencial para construir algoritmos eficientes y escribir código claro en PHP.
Precedencia y asociatividad de operadores
La precedencia de operadores en PHP determina el orden en que las operaciones son evaluadas en una expresión. Los operadores con mayor precedencia se evaluarán antes que aquellos con menor precedencia. Por otro lado, la asociatividad define cómo se agrupan los operadores de igual precedencia: si se evalúan de izquierda a derecha (asociatividad izquierda) o de derecha a izquierda (asociatividad derecha).
Por ejemplo, en la expresión:
$resultado = 5 + 3 * 2;
El operador de multiplicación (*
) tiene mayor precedencia que el operador de suma (+
), por lo que la multiplicación se evaluará primero. Así, $resultado
será igual a 11 y no a 16. Para alterar el orden de evaluación, se pueden utilizar paréntesis:
$resultado = (5 + 3) * 2; // Ahora $resultado es 16
Los paréntesis tienen la precedencia más alta y se utilizan para agrupar expresiones y controlar el orden de evaluación. Esto es especialmente útil cuando se desea asegurarse de que ciertas operaciones se realicen antes que otras, independientemente de la precedencia natural de los operadores involucrados.
La asociatividad de operadores es relevante cuando en una expresión aparecen varios operadores con la misma precedencia. Por ejemplo, los operadores de asignación tienen asociatividad de derecha a izquierda:
$a = $b = $c = 10;
En este caso, la asignación se realiza comenzando desde la derecha. Primero, $c
se asigna el valor 10, luego $b
se asigna el valor de $c
, y finalmente $a
se asigna el valor de $b
. Como resultado, las tres variables tendrán el valor 10.
Por otro lado, los operadores aritméticos como suma (+
) y resta (-
) tienen asociatividad izquierda. En la expresión:
$resultado = 20 - 5 - 5;
La operación se evalúa desde la izquierda: primero 20 - 5
es 15, y luego 15 - 5
es 10. Si la asociatividad fuera derecha, el resultado sería diferente.
Conocer la tabla de precedencia de operadores en PHP es esencial para evitar errores lógicos. A continuación, se muestran algunos operadores comunes ordenados de mayor a menor precedencia:
clone
,new
[ ]
,()
,->
,::
,**
,(int)
,(float)
, etc.++
,--
,~
,!
(operadores unarios)**
(exponenciación)*
,/
,%
(multiplicación, división y módulo)+
,-
,.
(suma, resta y concatenación)<<
,>>
(desplazamiento de bits)<
,>
,<=
,>=
,instanceof
,<>
(comparaciones)==
,!=
,===
,!==
(igualdad y identidad)&
(AND bit a bit)^
(XOR bit a bit)|
(OR bit a bit)&&
(AND lógico)||
(OR lógico)??
(operador de fusión de null)? :
(operador ternario)=
(asignación) y sus variantes+=
,-=
,*=
, etc.
Al combinar operadores lógicos, la precedencia también es crucial. El operador &&
tiene mayor precedencia que ||
, por lo que en la siguiente expresión:
$valor = true || false && false;
Se evalúa como true || (false && false)
. Primero, false && false
es false, luego true || false
es true. Si se desea cambiar el orden de evaluación, se deben usar paréntesis:
$valor = (true || false) && false; // $valor es false
Cuando se trabaja con expresiones complejas, es una buena práctica utilizar paréntesis para hacer el código más claro y evitar ambigüedades. Aunque se conozca la precedencia y asociatividad, el uso explícito de paréntesis mejora la legibilidad y mantenimiento del código.
Conversión y casting de tipos
En PHP, es común trabajar con diferentes tipos de datos, y en ocasiones es necesario convertir un valor de un tipo a otro. Esta conversión de tipos puede ser implícita o explícita, y es fundamental entender cómo funciona para evitar comportamientos inesperados en el código.
La conversión implícita ocurre cuando PHP cambia automáticamente el tipo de una variable según el contexto en el que se utiliza. Por ejemplo, al sumar una cadena que contiene un número con un entero:
$cadena = "10";
$entero = 5;
$suma = $cadena + $entero; // $suma será 15
En este caso, PHP convierte la cadena "10"
a un entero para poder realizar la operación aritmética. Aunque este comportamiento puede ser útil, es importante ser consciente de él para prevenir errores lógicos.
La conversión explícita, también conocida como casting, permite forzar a una variable a adoptar un tipo específico. Esto se logra utilizando operadores de casting antes del valor o variable a convertir. Los tipos de casting más comunes en PHP son (int)
, (float)
, (string)
, (bool)
, (array)
y (object)
.
Por ejemplo, para convertir una cadena a un entero:
$cadena = "42";
$entero = (int)$cadena; // $entero es 42 como entero
Al convertir valores a booleanos, es importante conocer qué valores se consideran false
. En PHP, los siguientes valores son evaluados como false
: false
, 0
, 0.0
, ""
, "0"
, []
, null
y tipos similares. Cualquier otro valor se considera true
:
$valor = 0;
$booleano = (bool)$valor; // $booleano es false
$valor = "PHP";
$booleano = (bool)$valor; // $booleano es true
Además de los operadores de casting, existen funciones como intval()
, floatval()
, strval()
y boolval()
que permiten realizar conversiones de forma más explícita y, en algunos casos, con mayor control:
$cadena = "3.14";
$entero = intval($cadena); // $entero es 3
$flotante = floatval($cadena); // $flotante es 3.14
Es relevante considerar que al realizar conversiones puede haber pérdida de precisión o información. Por ejemplo, al convertir un número de punto flotante a entero, se elimina la parte decimal:
$numero = 7.9;
$entero = (int)$numero; // $entero es 7
Desde PHP 7, es posible utilizar tipado estricto para reforzar el control sobre los tipos de datos. Al declarar declare(strict_types=1);
al inicio del script, se exige que los tipos coincidann exactamente, evitando conversiones implícitas en funciones y métodos:
declare(strict_types=1);
function multiplicar(int $a, int $b): int {
return $a * $b;
}
$resultado = multiplicar("4", 5); // Genera un TypeError
En este ejemplo, sin el tipado estricto, PHP convertiría la cadena "4"
a entero y no habría error. Con el modo estricto activado, se produce un TypeError porque se espera un entero y se ha proporcionado una cadena.
Al comparar valores, es crucial entender la diferencia entre los operadores ==
(igualdad) y ===
(identidad). El operador ==
compara los valores después de realizar conversiones de tipos si es necesario, mientras que ===
compara tanto el valor como el tipo, sin realizar conversiones:
$a = 0;
$b = "0";
$esIgual = ($a == $b); // true, porque ambos valores son considerados iguales
$esIdentico = ($a === $b); // false, porque los tipos difieren (int vs string)
Para evitar comportamientos inesperados, especialmente en condiciones, es recomendable utilizar el operador de identidad ===
y ser explícito en las conversiones.
También es posible convertir arrays a otros tipos. Al convertir un array a un objeto, cada elemento se convierte en una propiedad pública del objeto:
$datos = ['nombre' => 'María', 'edad' => 28];
$objeto = (object)$datos;
echo $objeto->nombre; // Muestra 'María'
Sin embargo, convertir un array a una cadena no produce un resultado útil, ya que simplemente devuelve la palabra "Array". Para obtener una representación en cadena del array, es preferible usar funciones como implode()
o json_encode()
:
$frutas = ['manzana', 'pera', 'uva'];
$cadena = implode(', ', $frutas); // $cadena es 'manzana, pera, uva'
$json = json_encode($frutas); // $json es '["manzana","pera","uva"]'
Al manipular datos, es esencial entender cómo PHP maneja la conversión y casting de tipos para escribir código seguro y eficiente. Ser explícito en las conversiones y utilizar las herramientas que ofrece el lenguaje ayuda a prevenir errores y a mantener la integridad de los datos en las aplicaciones.
Todas las lecciones de PHP
Accede a todas las lecciones de PHP y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Php
Introducción Y Entorno
Instalación Y Primer Programa De Php
Introducción Y Entorno
Tipos De Datos, Variables Y Constantes
Sintaxis
Operadores Y Expresiones
Sintaxis
Estructuras De Control
Sintaxis
Funciones Y Llamada De Funciones
Sintaxis
Cadenas De Texto Y Manipulación
Sintaxis
Manejo De Números
Sintaxis
Manejo De Fechas Y Tiempo
Sintaxis
Manejo De Arrays
Sintaxis
Introducción A La Poo En Php
Programación Orientada A Objetos
Clases Y Objetos
Programación Orientada A Objetos
Constructores Y Destructores
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Encapsulación
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Interfaces
Programación Orientada A Objetos
Traits
Programación Orientada A Objetos
Namespaces
Programación Orientada A Objetos
Autoloading De Clases
Programación Orientada A Objetos
Manejo De Errores Y Excepciones
Programación Orientada A Objetos
Manejo De Archivos
Programación Orientada A Objetos
Patrones De Diseño
Programación Orientada A Objetos
Introducción A Los Formularios En Php
Formularios
Procesamiento De Datos De Formularios
Formularios
Manejo De Archivos En Formularios
Formularios
Redirecciones Y Retroalimentación Al Usuario
Formularios
Formularios Dinámicos Y Separación De Lógica
Formularios
Introducción A La Persistencia En Php
Persistencia
Conexión A Bases De Datos
Persistencia
Consultas Y Operaciones Crud
Persistencia
Gestión De Transacciones
Persistencia
Manejo De Errores Y Excepciones En Base De Datos
Persistencia
Patrones De Acceso A Datos
Persistencia
Concepto De Sesiones En Php
Sesiones Y Cookies
Configuración De Sesiones
Sesiones Y Cookies
Cookies
Sesiones Y Cookies
Manejo Avanzado De Sesiones Y Cookies
Sesiones Y Cookies
Principales Vulnerabilidades En Php
Seguridad
Seguridad En Formularios Y Entrada De Datos
Seguridad
Protección Frente A Inyección Sql
Seguridad
Gestión De Contraseñas Y Cifrado
Seguridad
Seguridad En Sesiones Y Cookies
Seguridad
Configuraciones De Php Para Seguridad
Seguridad
Introducción Al Testing En Php
Testing
Phpunit
Testing
Cobertura De Código En Testing
Testing
Test Doubles (Mocks, Stubs, Fakes, Spies)
Testing
Pruebas De Integración Y Funcionales
Testing
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el uso de operadores aritméticos en cálculos básicos.
- Aplicar operadores lógicos para combinar condiciones.
- Utilizar operadores relacionales para comparar valores y evaluar condiciones.
- Diferenciar el uso de
==
vs===
en comparaciones. - Manipular la precedencia y asociatividad de operadores en expresiones complejas.
- Realizar conversiones de tipos de datos en PHP con casting implícito y explícito.