|
|
Objetivos |
- Conocer los diferentes operadores
- Utilizar operadores para crear expresiones
- Conocer la precedencia de operadores
|
|
Fuentes de información |
|
|
|
|
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:
|
|
|
|
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:
|
|
|
|
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:
|
|
|
|
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
|
|
|
|
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:
|
|
|
|
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
|
|
|
|
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.
|
|
|
|
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
|
|
|
|
|
|
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:
|
|
|
|
Implementa los tres ejemplos vistos en la teoría y almacénalos con los nombres operadores15.php y operadores16.php. |
|
|
|
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:
|
|
|
|
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. |
|
|