Como mencioné en un tutorial anterior, las expresiones son la parte más fundamental en un lenguaje de programación que tiene como fin devolver un valor. En este post hablaré de los operadores y precedencia que tienen.
En php hay una gran variedad de operadores con distintas finalidades.
Operador | Descripción | Ejemplo |
---|---|---|
Aritmético | Para matemática básica | $a – $b |
Array | Union de arrays | $a + $b |
Asignación | Asignar valores | $a = $b + 11 |
Bitwise | Manipular bits dentro de bytes (binario) | 12 > 5 |
Comparación | Comparar 2 valores | 2 < 5 |
Ejecucion | Ejecuta comandos shell dentro de comillas invertidas | ls -al |
Incremento/decremento | Añade o quita 1 | $a++ o $b– |
Lógico | Booleanos | $a and $b |
String | Concatenación | $a . $b |
Un operador puede tomar diferentes números de operandos:
- Los operadores unarios, tanto el de incremento como decremento, pueden ser uno ($a+ o $b-) o 2 operandos ($a++ o $b–).
- El operador ternario que toma forma de ? x : y. Es una condición de una sola línea que escoge entre 2 expresiones dependiendo del booleano resultante de la condición. Por ejemplo, (condición)? Valor-si-verdadero : valor-si-falso.
Precedencia
La precedencia se puede entender como una prioridad. Sucede como en las matemáticas, según el operador habrá que realizar esa operación antes que otra. De no tener precendecia los operadores serían procesados en el orden en el que se encuentran. Algunos tienen la misma precedencia.
Un ejemplo sería con los operadores de suma y resta. Al tener la asociatividad a la izquierda, se realizan las operaciones de izquierda a derecha.
1 + 2 + 3 – 4 + 5
2 – 4 + 5 + 3 + 1
Tanto uno como otro darán 7. Los operadores (+) y (-) tienen la misma precedencia.
1 * 2 * 3 / 4 * 5
2 / 4 * 5 * 3 * 1
Sucede lo mismo que en el caso anterior, dando 7,5 como resultado. Pero si se mezclasen operadores con diferentes precedencias
1 + 2 * 3 – 4 * 5
2 – 4 * 5 * 3 + 1
Habría que empezar con las multiplicaciones de izquierda a derecha. Los pondré entre paréntesis para que sea más ilustrativo.
1 + (2 * 3) – (4 * 5)
2 – (4 * 5 * 3) + 1
Esto resultaría en lo siguiente
1 + (6) – (20)
2 – (60) + 1
Los resultados finales serían -13 y -57.
Para forzar una precedencia basta con usar paréntesis. incluso aunque no haga falta es recomendable para que el código sea más legible.
((1 + 2) * 3 – 4) * 5
(2 – 4) * 5 * 3 + 1
En este caso serían 25 y -29 los resultados.
Tabla de operadores
En la siguiente tabla pondré los operadores en orden de precendencia (de mayor a menor) y su asociatividad. Recordad que la asociativdad indica el orden de las operaciones, de izquierda a derecha o viceversa.
Operador | Tipo | Asociatividad |
---|---|---|
() | Paréntesis | No |
++ — | Incremento / decremento | Derecha |
! | Lógico | Derecha |
* / % | Aritmético | Izquierda |
+ – . | Aritmético y string | Izquierda |
<< >> | Bitwise | Izquierda |
< <= > >= <> | Comparación | No |
== != === !== | Comparación | No |
& | Bitwise (y referencia) | Izquierda |
^ | Bitwise | Izquierda |
| | Bitwise | Izquierda |
&& | Lógico | Izquierda |
|| | Lógico | Izquierda |
? : | Ternario | Izquierda |
= += -= *= /= .= %= &= != ^= <<= >>= | Asignación | Derecha |
and | lógico | Izquierda |
xor | lógico | Izquierda |
or | lógico | Izquierda |
Y aquí finaliza el tutorial de hoy. Pasad un buen finde 🙂