downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Operadores aritméticos> <Operadores
Last updated: Fri, 20 May 2011

view this page in

Precedencia de operadores

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.

Precedencia de operadores
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 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5

// mezclar ++ y + produce un comportamiento indefinido
$a 1;
echo ++
$a $a++; // puede mostrar 4 o 5
?>
Usar paréntesis para incrementar la legibilidad del código.

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.



Operadores aritméticos> <Operadores
Last updated: Fri, 20 May 2011
 
add a note add a note User Contributed Notes Precedencia de operadores
charles at pilger dot com dot br 09-Feb-2011 08:00
Be very careful with the precedence. See this code:

<?php
$a
= 1;
$b = null;
$c = isset($a) && isset($b);
$d = ( isset($a) and isset($b) );
$e = isset($a) and isset($b);
var_dump($a, $b, $c, $d, $e);
?>

Result:

int(1)
NULL
bool(false)
bool(false)
bool(true) <==
kiamlaluno at avpnet dot org 12-Jul-2010 11:41
Be careful of the difference between

<?php
$obj
= new class::$staticVariable();
?>

<?php
$value
= class::$staticVariable();
?>

In the first case, the object class will depend on the static variable class::$staticVariable, while in the second case it will be invoked the method whose name is contained in the variable $staticVariable.
headden at karelia dot ru 09-Jun-2009 11:02
Although example above already shows it, I'd like to explicitly state that ?: associativity DIFFERS from that of C++. I.e. convenient switch/case-like expressions of the form

$i==1 ? "one" :
$i==2 ? "two" :
$i==3 ? "three" :
"error";

will not work in PHP as expected
Pies 08-Feb-2009 07:22
You can use the "or" and "and" keywords' lower precedence for a bit of syntax candy:

<?php

$page
= (int) @$_GET['page'] or $page = 1;

?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites