Operadores en PHP

  • Por
Lista descriptiva de los operadores más frecuentemente utilizados

Para avanzar nuestro conocimiento en el lenguaje PHP tenemos que detenernos a explicar los operadores, que son los símbolos que nos permiten expresar todo tipo de operaciones entre datos.

Cuando se estudia un lenguaje de programación, aprender los operadores es algo que generalmente realizas sobre la marcha, es decir, a medida que vas haciendo ejemplos vas aplicando operadores y su memorización es algo que surge de manera natural, sin tener que realizar muchos esfuerzos.

Es por tanto, que en el Manual de PHP nos vamos a detener a comentar cuáles son los operadores en PHP, pero las prácticas vendrán poco a poco a lo largo de sucesivos artículos. No pretendas memorizarlos todos, simplemente tenlos en cuenta y vuelve aquí más adelante para refrescar el conocimiento.

También advertimos que los operadores en PHP son más ricos de lo que se va a ver en este artículo, es decir, existen más operadores que no vamos a incluir en este artículo. Sin embargo, hay que aclarar que en el 99.9% de las ocasiones que usas operadores serán siempre los que vamos a conocer a continuación.

Qué son operadores

Un operador nos permite realizar una operación entre uno o más valores. El operador toma esos valores de entrada y los relaciona entre si, realizando una operación y aplicando otro valor como resultado. Para entendernos, operadores son los símbolos que usamos en las matemáticas para expresar cuentas con números, como los símbolos que nos indican ciertas operaciones: suma, resta, multiplicación, división...

En un lenguaje de programación los valores que vamos a relacionar mediante operadores pueden estar contenidos en variables, o escritos en el propio código. Los operadores toman esos valores y los modifican generando nuevos valores. A veces son conocidas operaciones matemáticas, pero a veces son operaciones lógicas o de asignación, por poner varios ejemplos.

Operadores en PHP por tipos de operaciones

En los capítulos anteriores ya hemos utilizado en nuestros ejemplos algunos operadores. Ahora les vamos a poner nombres, agrupados atendiendo al tipo de operación que realizan.

Operadores aritméticos

Nos permiten realizar operaciones numéricas con nuestras variables. Son los más fáciles de asimilar, porque generalmente todos conocemos esas operaciones.

  • + Suma
  • - Resta
  • * Multiplicación
  • / División
  • % Módulo (resto de la división)
  • ** Exponenciación (2 ** 3, elevar 2 la a tercera potencia)
Nota: El operador aritmético que puede resultar más desconocido para los lectores es el operador %. Explicamos con mayor detenimiento su funcionamiento y un ejemplo en el que es útil en el taller: Listas de elementos con colores alternos en PHP.

Operadores de asignación

Los operadores de asignación son los más habituales y nos permiten traspasar valores en variables. Asignar es el proceso por el cual colocamos un valor en una variable.

  • = Asignación

En el pasado ya habíamos creado variables y asignado valores, por lo que lo debes de reconocer. Lo usamos así:

$valor = 'Esto es lo que se va a asignar a la variable';

Además, en la asignación podría darse el caso que el valor a asignar fuese el resultado de realizar una operación.

$a = 23;
$b = 3;
$c = $a - $b;

Nota: Después de la ejecución de ese código ¿Cuál será el valor de la variable $c?. Seguro que deduces el valor 20. Si es así estás en lo cierto. El resultado de la operación de $a (que vale 23) menos $b (que vale 3) es igual a 20, que se asigna todo seguido a la variable $c. Lo que has visto como valor a asignar a $c ($a - $b) es lo que se conoce como una expresión. Antes de asignar se realiza el cómputo de la expresión y luego se asigna el valor.

Como has podido ver, asignar es una operación bien simple, lo que está a la derecha del operador se asigna a la variable que está a la izquierda. No tiene más. Sin embargo, PHP incluye una serie de operadores de asignación con una operación asociada, que nos permiten realizar esa operación y una asignación en un único paso.

  • += Suma y asignación
  • -= Resta y asignación
  • *= Multiplicación y asignación
  • /= División y asignación
  • %= Módulo y asignación
  • .= Concatenación y asignación
$x = 5;
$x += 5; //$x valdrá 10

$cadena = "Hola ";
$cadena .= "mundo"; //$cadena ahora vale "hola mundo"
Nota: Mira más abajo "operaciones sobre cadenas" para entender la concatenación.

Operadores de comparación

Se utilizan principalmente en nuestras condiciones para comparar dos variables y verificar si cumple o no la propiedad del operador.

  • == Comprueba si son iguales
  • != Comprueba si son distintos
  • === Comprueba si son iguales y de exactamente el mismo tipo
  • !== Comprueba si son distintos o de distinto tipo
  • <> Diferente (igual que !=)
  • < Menor qué, comprueba si un valor es menor que otro
  • > Mayór qué
  • <= Menor o igual
  • >= Mayor o igual
  • <=> Comparador de orden. (PHP 7)
  • ?? uno o el otro (PHP 7)

En este conjunto de operadores de comparación encontramos varios operadores nuevos, incorporados en PHP 7. Los estudiaremos aparte. Pero los que más se utilizan son los otros, que realmente son bastante sencillos de aprender, aunque para ver ejemplos interesantes tenemos que entender las estructuras de control.

Vamos a adelantarnos un poco, presentando aquí un código en el que usamos la estructura de control condicional de PHP, que nos servirá para comparar valores dados en una expresión y hacer cosas cuando cumpla o no cierta condición.

$a = 20;
$b = 30;

if($a < $b) {
    echo '$a es menor que $b';
}

Ejecutando ese código obtendremos la salida "$a es menor que $b", porque la operación de comparación se realizó y su resultado fue afirmativo.

Es interesante, aunque incidiremos más adelante, la existencia de los operadores === y !== que no solo comprueban si algo es igual a otra cosa, sino que además tienen en cuenta los tipos de las variables. Mira primero este código:

$a = 20;
$b = "20";

if($a == $b) {
    echo '$a es igual que $b'; // (sin tener en cuenta los tipos)
}

Como resultado de ejecución PHP nos dirá "$a es igual que $b". Esto es porque la operación de comparación realizada con el operador == no tiene en cuenta los tipos de las variables. Para PHP 20 y "20" es lo mismo. Sin embargo, ahora mira el siguiente código:

$a = 20;
$b = "20";

if($a === $b) {
    echo '$a es igual que $b, y del mismo tipo';
} else {
    echo '$a es distinto que $b, o de distinto tipo';
}

Al ejecutar ese código obtendremos la salida "$a es distinto que $b, o de distinto tipo". Porque al usar el operador === sí le estamos pidiendo a PHP que tenga en cuenta los tipos para decirnos si algo es igual a otra cosa.

Nota: Puedes saber más sobre la estructura "if" en el artículo sobre la estructura condicional de PHP.

Operadores lógicos

Los operadores lógicos sirven para realizar operaciones lógicas, valga la redundancia. Son operaciones que al final van a devolver un "sí" o un "no", positivo o negativo. Se usan en combinación con los operadores de comparación cuando la expresión de la condición lo requiere.

  • and Operación lógica "y", será verdadero si ambos son verdaderos.
  • or Operación lógica "o", será verdadero si uno de ellos es verdadero
  • xor Operación lógica "xor", será verdadero si uno de ellos es verdadero, pero no ambos.
  • ! Operación de negación, si era verdadero pasa a falso y viceversa.
  • && Operación lógica "y"
  • || Operación lógica "o"

Los operadores lógicos también se usan generalmente en expresiones que vas a usar para evaluar en estructuras de control. Su operación tiene sentido generalmente cuando trabajamos con valores boleanos (sí o no) o expresiones que una vez evaluadas producen valores boleanos.

$a = true;
$b = false;

if($a && $b) {
    echo '$a y $b son los dos verdaderos';
} else {
    echo 'o uno de $a o $b son falsos, o los dos son falsos';
}

Ese código nos dirá que "o uno de $a o $b son falsos, o los dos son falsos".

Nota: Puede parecer curioso que en PHP haya dos operadores que sirven para la operación lógica "y" y dos para la expresión lógica "o". De hecho es bastante extraño. El motivo es que cada operador tiene una precendencia de operadores distinta.

Operadores de incremento

Sirven para aumentar o disminuir en una unidad el valor de una variable. Son atajos para hacer una operación típica en los recorridos de bucles, de aumentar o disminuir un valor que usamos para llevar la cuenta de las iteraciones realizadas.

  • ++$a Pre-incremento
  • $a++ Post-incremento
  • --$a Pre-decremento
  • $a-- Post-decremento

Estos operadores son interesantes, porque realizan dos cosas, igual que los operadores de asignación combinada que vimos antes. Por un lado un decremento o incremento y por otro lado se devuelven ellos mismos como resultado del operador. Lo curioso es que existen los "pre" y los "post" y es que funcionan de manera un poco distinta.

Cuando tenemos un pre-incremento o pre-decremento, primero se realiza el incremento/decremento y luego se devuelve ese valor. Con el post-incremento o post-decremento, primero se devuelve el valor original y luego se realiza el incremento/decremento. Para acabar de entenderlo es mejor examinar este código:

$a = 3;
$b = ++$a;
echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 4

$a = 3;
$b = $a++;
echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 3

En este código como salida obtenemos cosas distintas por el pre-incremento y el post-incremento. La salida aparece al lado, en el comentario. Analízalo y podrás entender cómo es posible.

Operadores de cadenas

Cuando trabajamos con cadenas de caracteres tenemos un operador especial que es el de la concatenación. Sirve para unir una cadena a la otra.

  • . Concatenación
$saludo = "Hola ";
$nombre = "DesarrolloWeb.com";

$saludoCompleto = $saludo . $nombre; // vale "Hola DesarrolloWeb.com"

Precedencia de operadores

Cuando se aprende un leguaje de programación debemos prestar atención especial a la predecencia de operadores, que es básicamente un conjunto de reglas y orden por el que se irán evaluando los operadores cuando trabajamos con expresiones que incluyen varios de ellos.

Igual que en las matemáticas, en ocasiones, si hacemos las operaciones en un orden u otro, los valores finales pueden también tener cambios. En lenguajes de programación, dependiendo del orden en el que se apliquen esos operadores, las expresiones pueden dar pie a resultados distintos.

Por ejemplo, toma la expresión: 2 * 3 + 10

  • Si se resuelve primero la suma sería 2 * 13 = 26.
  • Si se resuelve primero la multiplicación sería 6 + 10 = 16.

¿cuál de esas dos opciones será la que PHP da por válida? La precedencia de operadores sirve para aclarar esa duda y que los programadores sepan a priori cómo el lenguaje va a resolver las expresiones, siendo capaces de escribirlas de modo que la solución sea la que ellos esperaban.

Sin embargo, no siempre la predecencia del lenguaje es la que nosotros deseamos que se aplique. Para facilitar las cosas existen los paréntesis, que nos permiten definir nuestras expresiones marcando qué operadores deben resolverse antes. Dicho de otro modo, siempre que usemos paréntesis estaremos obligando al compilador a resolver antes determinadas operaciones, a pesar de la precedencia que él tenga definida de manera predeterminada.

La expresión de antes, escrita de este modo: (2 * 3) + 10 no tendría lugar a distintas interpretaciones. Obviamente, debemos conocer la precedencia de operadores para no dar lugar a casos donde el intérprete de PHP pueda obtener resultados no esperados. O si no, estaremos obligados a usar siempre paréntesis, produciendo expresiones de complejidad superior a la necesaria.

Nota: También puede darse el caso que, aunque sepamos bien la predecencia, colocar unos paréntesis puede ayudar a la legibilidad del código, dado que cualquier lector humano, al ver los paréntesis sabrá inmediatamente que ese pedazo de expresión se evaluará antes.

Te recomendamos leer la documentación de PHP para aprender más sobre la precedencia y consultar la tabla completa, que es un poco larga como para reflejarla aquí.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

María Celia Ibarra

09/3/2002
Erratas, en este archivo, Operadores:

Donde dice
¡=
debe decir
!=

Donde dice
-$variable
debe decir
--$variable

He probado todos los ejemplos y funcionan bien. El tutorial es muy claro. Gracias

(Todo actualizado ya, muchas gracias!!)

Rikardo Beltran

25/2/2004
Mas bien tengo una duda

Como hago para definir una variable a partir de cadenas de texto

...tengo:

//un contador
$num=5;
//y tengo una lista de var
$txt1="uno";
$txt2="dos";
$txt3="tres";

for ($i=0; $i < $num; $i++) {
$aa.="txt$i";
echo "$aa";
}
//necesito q' el valor desplegado no sea la cadena "txt$i" ("txt1","txt2",...) sino el valor asociado a la variable definida al principio ("uno","dos",..).

Espero haberme explicado bien. Agradeceria mucho la ayuda, estoy atorado con esto desde hace varios dias

Un saludo, gratcias!!!

ray

06/4/2004
Una pregunta: Se pueden comparar fechas de alguna forma sencilla. Suponiendo que la fecha de hoy la obtengo:
//Fecha de hoy
$today = getdate();
$mon = $today['mon'];
$dayn = $today['mday'];
if ($dayn < 10) $dayn = (string)'0'.$dayn;
if ($mon < 10) $mon = (string)'0'.$mon;
$year = $today['year'];
$hoy=("$year-$mon-$dayn");
y que la otra fecha me llega a través de un formulario.
Gracias

Ariel

30/1/2005
Falta el operador '===' Identico a que a parte de tener el mismo valor debe ser del mismo tipo.
Ejemplo:
$avar = "23";
$bvar = 23;
if ($avar===$bvar)
{
echo "Las variables son identicas";
}else{
echo "Las variables NO son identicas";
}

pato1006_1@hotmail.com

07/6/2005
Mas bien tengo una duda Como hago para definir una variable a partir de cadenas de texto ...tengo: //un contador $num=5; //y tengo una lista de var $txt1="uno"; $txt2="dos"; $txt3="tres"; for ($i=0; $i < $num; $i++) { $aa.="txt$i"; echo "$aa"; } //necesito q' el valor desplegado no sea la cadena "txt$i" ("txt1","txt2",...) sino el valor asociado a la variable definida al principio ("uno","dos",..). Espero haberme explicado bien. Agradeceria mucho la ayuda, estoy atorado con esto desde hace varios dias Un saludo, gracias!!!
Una pregunta: Se pueden comparar fechas de alguna forma sencilla. Suponiendo que la fecha de hoy la obtengo: //Fecha de hoy $today = getdate(); $mon = $today['mon']; $dayn = $today['mday']; if ($dayn < 10) $dayn = (string)'0'.$dayn; if ($mon < 10) $mon = (string)'0'.$mon; $year = $today['year']; $hoy=("$year-$mon-$dayn"); y que la otra fecha me llega a través de un formulario. Gracias
Falta el operador '===' Identico a que a parte de tener el mismo valor debe ser del mismo tipo. Ejemplo: $avar = "23"; $bvar = 23; if ($avar===$bvar) { echo "Las variables son identicas"; }else{ echo "Las variables NO son identicas"; }
Gracias!

DaBuCoDoNoSoR

25/3/2006
Rikardo Beltran 25/2/04
Mas bien tengo una duda

Como hago para definir una variable a partir de cadenas de texto

...tengo:

//un contador
$num=5;
//y tengo una lista de var
$txt1="uno";
$txt2="dos";
$txt3="tres";

for ($i=0; $i < $num; $i++) {
$aa.="txt$i";
echo "$aa";
}
//necesito q' el valor desplegado no sea la cadena "txt$i" ("txt1","txt2",...) sino el valor asociado a la variable definida al principio ("uno","dos",..).

Espero haberme explicado bien. Agradeceria mucho la ayuda, estoy atorado con esto desde hace varios dias

Un saludo, gratcias!!!.

-----------------------------------------
como respuesta a tu pregunta, que yo sepa el error de que se vea deves cambiar los " " por ' ' a mi opinion

victor

16/6/2007
Aunque despues lo aclaran, en la tabla dice:

"$variable += 10 Suma 10 a $variable"
"$variable -= 10 Resta 10 a $variable"

Pero realmente lo que hace es "suma $variable + 10 y el resultado se le asigna a la misma $variable", e igual para la resta.

Saludos!

abraham

22/9/2007
solo agrego que no me gusta la administracion cambienla por otra y las matema
ticas

Melani Navarro

17/3/2009
gracias portodo lo que nos informan, me ayudan mucho en mis tareas.

OJO
PODRIAN INCREMENTAR SU LISTA

brayan

03/8/2009
brayan
nomesirbio paranada esta pagina mejorala yo pedi fue otra cosa de lo que mesalio aqui

NATALIA

03/8/2009
BUENISIMO
ESLO MEJOR QUE YO EBISTO

GRASIAS

POR AYUDARME

christian

20/11/2009
operadores
Por que con el operador (-) tengo problemas.
Si yo quiero buscar "gatos" - negros
lo que quiero decir es que me busque gatos pero que no sean negros.
si yo digo "la vejas" - casino
estoy diciendo que me busque lugares de la vegas pero que no me incluya casino
en la dos opciones me hace lo contario me busca gatos negros y me busca casino
expliquenme por favor.

NOSE

20/4/2010
NOSE
NOSIVE

wilman_godoy_palomino

17/11/2010
RESPUESTA A RIKARDO BELTRAN
RESPUESTA
Mas vale tarde que nunca

<?php
$num=5;
$cad="txt";
for ($i=1; $i<=$num;$i++) {
$cad.=$i;
echo $cad;
$cad="txt";
}
?>




****
PREGUNTA
****
Mas bien tengo una duda

Como hago para definir una variable a partir de cadenas de texto

...tengo:

//un contador
$num=5;
//y tengo una lista de var
$txt1="uno";
$txt2="dos";
$txt3="tres";

for ($i=0; $i < $num; $i++) {
$aa.="txt$i";
echo "$aa";
}
//necesito q' el valor desplegado no sea la cadena "txt$i" ("txt1","txt2",...) sino el valor asociado a la variable definida al principio ("uno","dos",..).

Espero haberme explicado bien. Agradeceria mucho la ayuda, estoy atorado con esto desde hace varios dias

Un saludo, gratcias!!!

Eduardo

30/12/2010
Texto asociado
Hey acerca del amigo que desea mostrar el texto asociado y no el indice de la variable pues a mi lo que se me ocurre es que no definas esto:
$txt1="uno"
$txt2="dos"
$txt3="tres"

sino que definas un arreglo (array) y hagas esto:
$numeros[n] // en donde n seria el numero de espacios que necesitas
$numeros[0]="uno"
$numeros[1]="dos"
$numeros[2]="tres", etc.
(for $i=1;$i<=$numeros.lenght -1 ;$i++){
echo $numeros[$i]
}
espero haberte servido de algo.
gracias y saludos a todos.

Rafael

28/9/2011
Tu duda de ccomo convertir vatriables
Hay una cosa que como soy iniciado no se como llamarlo pero que es la sentencia Swich, la cual si por eejmplo pones que si la var1="uno" entonces haz que la var1=1
y asi con las tres. Tammbien lo puedes poner con IF pero es mas pesado.

Por favor soy novato en la programacion. Quiero criticas.