La precedencia de un operador indica qué tan "estrechamente" se unen dos expresiones juntas. Por ejemplo, en la expresión 1 + 5 * 3 , la respuesta 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. Si la precedencia de operadores es la misma, de izquierda a derecha se utiliza la asociatividad.
La siguiente tabla lista la precedencia de los operadores con los operadores de mayor precedencia listados en la parte superior de la tabla. Los operadores en la misma línea tienen la misma precedencia, en cuyo caso su asociatividad decide cual el el orden para evaluarlos.
Asociatividad | Operadores | Información adicional |
---|---|---|
no asociativo | clone new | clone and new |
izquierda | [ | array() |
no asociativo | ++ -- | incremento/decremento |
derecha | ~ - (int) (float) (string) (array) (object) (bool) @ | tipos |
no asociativo | instanceof | tipos |
derecha | ! | lógico |
izquierda | * / % | aritmética |
izquierda | + - . | aritmética y string |
izquierda | << >> | bit a bit |
no asociativo | < <= > >= <> | comparación |
no asociativo | == != === !== | comparación |
izquierda | & | bit a bit y referencias |
izquierda | ^ | bit a bit |
izquierda | | | bit a bit |
izquierda | && | bit a bit |
izquierda | || | lógico |
izquierda | ? : | ternario |
derecha | = += -= *= /= .= %= &= |= ^= <<= >>= => | asignación |
izquierda | and | lógico |
izquierda | xor | lógico |
izquierda | or | lógico |
izquierda | , | muchos usos |
Asociatividad izquierda significa que la expresión es evaluada de izquierda a derecha, asociatividad derecha quiere decir lo contrario.
Example #1 Asociatividad
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
Note:
Aunque = tiene una precedencia menor que la mayoría de los demás operadores, PHP permitirá aun expresiones similares a lo siguiente: if (!$a = foo()), en cuyo caso el valor devuelto de foo() es puesto en $a.