Objetivos Objetivos
  • Conocer los diferentes operadores
  • Utilizar operadores para crear expresiones
  • Conocer la precedencia de operadores
Fuentes de información Fuentes de información
Contenidos
Contenidos
 

1.- Introducción

Una vez vistas las variables y constantes, vamos a introducir un elemento fundamental para crear expresiones de mayor complejidad. Al desarrollar cualquier programa empleamos normalmente operadores que nos sirven para realizar diversas operaciones que le otorgan un cierto grado de complejidad a nuestros programas, ya que, de otro modo el programa realizaría siempre lo mismo y por tanto no sería útil.

2.- Operadores

Un operador es algo que toma uno más valores (o expresiones) y produce otro valor (de modo que la construcción en sí misma se convierte en una expresión).

Los operadores se pueden agrupar de acuerdo con el número de valores que toman o con su funcionalidad. La primera de las clasificaciones tiene los siguientes grupos:

  • operadores unarios, los cuales toman sólo un valor. Ejemplos de ello son los operadores lógico de negación (!) y de incremento (++), ya que necesitan únicamente una variable para trabajar
  • operadores binarios, éstos toman dos valores y son los más numerosos. Ejemplos de ello son los operadores de suma (+) y resta (-), que necesitan dos variables para poder realizar la operación.
  • operador ternario (o condicional), el cual necesita tres valores para poder funcionar. Éste tiene la siguiente notación: condición?valor_si_verdadero:valor_si_falso. Ejemplo: si $a es verdadero, entonces $a?"$b=2":"$b=3" hará que $b valga 2, en caso de que $a fuera falso, $b valdría 3.

La segunda de las clasificaciones es la más habitual y divide los operadores en: aritméticos, de asignación, lógicos, condicionales, de control de errores y bit a bit. Vamos a explicar uno a uno con ejemplos detallados para que queden bien claros.

2.1.- Operadores aritméticos

Este tipo de operadores permite realizar operaciones aritméticas (matemáticas) y se asemeja a los vistos en el lenguaje C/C++. Éstos son los siguientes:

Nombre Ejemplo Resultado
Suma $a + $b Suma a $a y $b
Resta $a - $b Resta de $a y $b
División $a / $b Cociente de $a y $b
Multiplicación $a * $b Producto de $a y $b
Módulo $a % $b Resto de $a y $b
Post-incremento $a++ Devuelve el valor de $a y lo incrementa en 1
Pre-incremento ++$a Incrementa en 1 el valor de $a y devuelve el valor incrementado
Pos-decremento $a-- Devuelve el valor de $a y lo decrementa en 1
Pre-incremento --$a Decrementa en 1 el valor de $a y devuelve el valor incrementado

Vamos a crear un programa que implemente un ejemplo de cada una de las operaciones:

Y el resultado:

Si nos fijamos, en el caso de los operadores de incremento y decremento hemos imprimido su valor antes y después de realizar la operación para que se pueda observar mejor el orden de realización de ésta. En el caso de los post, la operación se realiza después de imprimir el valor, por eso en los ejemplos los valores se modifican de una impresión a otra, mientras que en el caso de los pre la operación, al realizarse antes de imprimir el valor, al volver a realizar una segunda impresión del valor éste no se modifica.

También podemos realizar operaciones aritméticas directamente con números sin tener que declarar variables, a excepción de los incrementos/decrementos. En el siguiente ejemplo eliminamos las variables y las sustituimos por valores:

Y el resultado:

 

Ejercicios
Ejercicio
 

En la teoría hemos visto dos programas en los que se implementan ejemplos de utilización de operadores aritméticos. Créalos y almacenalos con los nombres operadores01.php y operadores02.php. Además crea un nuevo programa en el que se muestren las tablas del 5 (operadores03.php) y del 9 (operadores04.php) utilizando el operador multiplicación. Los programas deberán tener el siguiente formato:

Contenidos
Contenidos
 

2.2.- Operadores de asignación

Unos de los operadores más imporantes y más utilizados en cualquier lenguaje de programación son los de asignación, ya que nos permiten otorgar valores a variables y constantes. El operador básico de asignación es el símbolo igual (=), el cual no se refiere a la expresión "igual a", mas bien sería algo así como "se define como", ya que el operando de la izquierda se establece con el valor de la derecha.

De modo general, la asignación básica tiene el siguiente formato:

$nombre_variable = valor

const nombre_constante = valor

Veamos algunos ejemplos para aclararlo:

$num1 = 10

$nombre = "Pablo"

const PI = 3.1416

Pero también podemos utilizar la asignación para dar a las variables resultados de expresiones que utilicen operadores:

$num1 = $num2 + $num3

$resultado = $valor2 / $valor5

En el siguiente ejemplo se pueden ver algunas expresiones con operadores de asignación:

Y el resultado:

A continuación explicamos las diferentes variantes del operador de asignación:

  • += : Este operador realiza la suma de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $a = 10, entonces $a+=7 sumaría lo que vale la variable $a (10) y el valor 7, asignándolo a $a, la cual pasaría a valer 17.
  • -= : Este operador realiza la resta de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $b = 14, entonces $b-=3 restaría lo que vale $b y 3, lo que daría como resultado 11, y lo asignaría a $b.
  • *= : Este operador realiza el producto de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $valor = 20, entonces $valor*=3 mutiplicaría lo que vale $valor por 3, lo que daría como resultado 60 y se asignaría a $valor.
  • /= : Este operador realiza la división de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $val = 20, entonces $val/=4 dividiría lo que vale $val entre 4, lo que daría como resultado 5 y se asignaría a $val.
  • %= : Este operador obtiene el resto de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $num = 20, entonces $num%=4 hallaría el resto, que daría 0, y se asignaría a $num.
  • .= : Este operador concatena el valor de la derecha con la izquierda y lo asigna a la derecha. Ejemplo: si $nombre = "Juan" , entonces $nombre.= " Guerra", se asignaría a $val el valor "Juan Guerra".

Un ejemplo que contiene todos los casos:

Y el resultado:

 

Ejercicios
Ejercicio
 

Implementa los ejemplos vistos en la teoría y almacénalos con los nombres operadores05.php y operadores06.php. Además implementa un programa que realice los siguientes pasos (almacénalo como operadores07.php):

  • Declara tres variables $a, $b y $c, asignándoles los valores 10, "Hola", y 4
  • Asigna a la variable $a el valor de la variable $c
  • Utiliza el operador += para sumar a $c 5 e imprime el resultado
  • Utiliza el operador *= para multiplicarlo por 8 e imprime el resultado
  • Utiliza el operador .= para agregar a $b el valor " a todos" e imprime el resultado
Contenidos
Contenidos
 

2.3.- Operadores lógicos

Este tipo de operadores nos permiten realizar operaciones básicas de carácter lógico. Además no hay que olvidar que los operadores lógicos se suelen utilizar con variables de tipo booleano.

Entre ellos encontramos:

Nombre Ejemplo Resultado
And $a && $b Operador Y. Si ambos son verdaderos el resultado es verdadero, en caso contrario es falso
Not !$a Operador NO o negación. Si es verdadero pasa a falso y viceversa
Or $a || $b Operador O. Si alguno de los dos es verdadero el resultado es verdadero.

 

Para el operador AND (&&) la tabla de verdad será la siguiente:

A B Resultado
VERDADERO VERDADERO VERDADERO
VERDADERO FALSO FALSO
FALSO VERDADERO FALSO
FALSO FALSO FALSO

Si lo implementamos en un programa:

Con su resultado:

Para el operador NO (!) la tabla de verdad será la siguiente:

A Resultado
VERDADERO FALSO
FALSO VERDADERO

Si lo implementamos en un programa:

Con su resultado:

Para el operador OR (||) la tabla de verdad será la siguiente:

A B Resultado
VERDADERO VERDADERO VERDADERO
VERDADERO FALSO VERDADERO
FALSO VERDADERO VERDADERO
FALSO FALSO FALSO

Si lo implementamos en un programa:

Con su resultado:

 

 

Ejercicios
Ejercicio
 

Implementa los ejemplos vistos en la teoría y almacénalos con los nombres operadores08.php, operadores09.php y operadores10.php. Además implementa un programa que realice los siguientes pasos (almacénalo como operadores11.php):

  • Declara tres variables $a, $b y $c, asignándoles los valores true, false y true
  • Realiza la siguiente operación !$a || ($b && $c) e imprime el resultado
  • Realiza la siguiente operación ($a || $c || $c) && (!$c && $a) e imprime el resultado
  • Realiza la siguiente operación (!$a || !$b && !$c) || ($a || !$a) e imprime el resultado
Contenidos
Contenidos
 

2.4.- Operadores de comparación

Los operadores de comparación, como su nombre lo indica, permiten comparar dos valores de variables o constantes. Este tipo de operadores son ampliamente utilizados tanto para asignaciones como condiciones en estructuras de control.

Entre ellos encontramos:

Nombre Ejemplo Resultado
Igual $a == $b Si ambos son iguales el resultado devuelve verdadero
Idéntico $a === $b Si ambos son iguales y son del mismo tipo devuelve verdadero
Diferente $a != $b Si ambos son diferentes el resultado devuelve verdadero
No idéntico $a !== $b Si ambos son diferentes o son de diferentes tipos devuelve verdadero
Mayor $a > $b Si el primero es mayor que el segundo devuelve verdadero
Menor $a < $b Si el primero es menor que el segundo devuelve verdadero
Mayor o igual $a >= $b Si el primero es mayor o igual que el segundo devuelve verdadero
Menor o igual $a <= $b Si el primero es menor o igual que el segundo devuelve verdadero

Si se compara un número con un string o la comparación implica strings numéricos, entonces cada string es convertido en un número y la comparación es realizada numéricamente. Aun así hay que tener en cuenta que la conversión de tipo no tiene lugar cuando la comparación es === o !== ya que esto involucra comparar tanto el tipo como el valor.

Vamos a crear un programa que implemente un ejemplo de las cuatro primeras operaciones:

Con su resultado:

Si nos fijamos en la primera y cuarta operación, ambos son iguales por tener el mismo valor, pero no son idénticos ya que no tienen el mismo tipo (uno es entero y otro string).

Continuando con los cuatro últimos operadores:

Y el resultado:

En la última operación se ha producido un cambio de tipo en el que el string se ha cambiado a booleano, con lo que el '1' se ha convertido en true, lo que hace que la comparación false <= true sea vedadera.

Ejercicios
Ejercicio
 

Implementa los dos ejemplos vistos en la teoría y almacénalos con los nombres operadores12.php y operadores13.php. Además implementa un programa que realice los siguientes pasos (almacénalo como operadores14.php):

  • Declara cuatro variables $a, $b, $c y $d, asignándoles los valores 3.7, false, 1 y "3.7"
  • Realiza la siguiente operación $a == $c e imprime el resultado
  • Realiza la siguiente operación $a === $d e imprime el resultado
  • Realiza la siguiente operación $b >= $c e imprime el resultado
Contenidos
Contenidos
   
 

2.5.- Operador de control de errores

PHP soporta un operador de control de errores: el signo de arroba (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueden ser generado por esa expresión será ignorado. Este símbolo se puede anteponer a variables, funciones, includes y constantes.

Antes de poner el operador deberemos tener en cuenta que éste se utiliza para control de errores y que, de ponerlo, deshabilitará incluso el reporte de errores en casos de fallos críticos que terminarán la ejecución del script. Entre otras cosas, esto quiere decir que si se usa "@" para eliminar los errores de una cierta función y ésta no se encuentra disponible o ha sido escrita de forma incorrecta, el script se detendrá en ese punto sin indicación de por qué. Por ello es interesante utilizarlo con precaución y teniendo en cuenta la deshabilitación de los errores.

Veamos un ejemplo clásico, el de la división por cero:

Como es de esperar, la división no se puede hacer y el resultado será un aviso de división por cero:

Si ahora le ponemos el símbolo @ delante de la división:

Omitirá el error y no mostrará mensaje alguno:

2.6.- Operador bit a bit

Los operadores bit a bit permiten la evaluación y la manipulación de bits específicos dentro de un integer. Sobre éstos se pueden realizar un conjunto de operaciones:

Nombre Ejemplo Resultado
And $a & $b Operador Y. Activa aquellos bits que están activos en ambos
Or $a | $b Operador O. Activa aquellos bits que están activos en uno u otro
Not ~$a Operador NO. Activa aquellos bits desactivados y viceversa
Xor $a ^ $b Operador O exclusivo. Activa aquellos bits que están activos en uno u otro, pero no en ambos

Antes de implementar el programa, vamos a mostrar algunos ejemplos de operaciones en binario para que quede todo más claro. Para ello vamos a seleccionar los siguientes números: a = 2, b = 4, c = 5, d = 8; y pasarlos a binario. Como resultado: a = 0010, b = 0100, c = 0101 y d = 1000. Si realizamos las siguientes operaciones:

b and c = 0100 & 0101 = 0100 = 4

c or d = 0101 | 1000 = 1101 = 13

not a = ~ 0010 = 1101 = 13

b xor c = 0100 ^ 0101 = 0001 = 1

En negrita se han indicado los bits con valor uno del resultado. Una vez entendido mostramos un ejemplo de programa:

Y el resultado:

 

Ejercicios
Ejercicio
 

Implementa los tres ejemplos vistos en la teoría y almacénalos con los nombres operadores15.php y operadores16.php.

Contenidos
Contenidos
 

2.7.- Precedencia de operadores

La precedencia de un operador indica el orden en el que se van realizando las operaciones. Por ejemplo, en la expresión 1 + 5 * 3 , el resultado es 16 y no 18 porque el operador de multiplicación ("*") tiene una precedencia mayor que el operador de adición ("+"). Los paréntesis pueden ser usados para forzar la precedencia, si es necesario. Por ejemplo: (1 + 5) * 3 se evalúa como 18.

Cuando los operadores tienen la misma precedencia, su asociatividad decide si se evalúan a partir de la derecha o desde la izquierda. Así en la siguiente tabla se listan, en orden, la precedencia de los operadores, con los operadores de mayor precedencia en la parte superior. Los operadores en la misma línea tienen la misma precedencia, en cuyo caso su asociatividad decide cuál es el orden de evaluación (asociatividad izquierda significa que la evaluación procede de la izquierda a la derecha y asociatividad derecha significa lo opuesto).

Asociatividad Operador
derecha
++ -- ~ @
derecha
!
izquierda
* / %
izquierda
+ -
no asociativo
< <= > >=
no asociativo
== != === !== <>
izquierda
&
izquierda
^
izquierda
|
izquierda
&&
izquierda
||
izquierda
? :
derecha
= += -= *= /= .= %= &= |= ^= <<= >>= =>

Como se puede observar, los operadores de asignación serán los últimos mientras que el de control de errores, los aritméticos ++ y --, y el de negación (~), son los primeros en ser evaluados. En el programa siguiente mostramos ejemplos de precedencias en algunos de los operadores de la tabla:

Y su resultado:

Ejercicios
Ejercicio
 

Implementa el ejemplo visto en la teoría y almacénalo con el nombre operadores17.php.

Una vez hecho comprímelo todo en un fichero llamado operadores.zip y súbelo a la plataforma.