La precedenza di un operatore specifica come esso tenga legate assieme "strettamente" due espressioni. Per esempio, nell'espressione 1 + 5 * 3, la risposta è 16 e non 18 perché l'operatore di moltiplicazione ("*") ha una precedenza più alta rispetto all'operatore di addizione ("+"). Le parentesi possono essere usate per forzare la precedenza, se necessario. Per esempio: (1 + 5) * 3 viene valutata 18.
Quando gli operatori hanno precedenza identica, la loro associatività decide se sono valutati partendo da destra o da sinistra - vedere gli esempi qui sotto.
La seguente tabella fornisce una lista della precedenza degli operatori con gli operatori a più alta precedenza elencati prima. Gli operatori presenti nella medesima linea hanno uguale precedenza, in questi casi la loro associativià decide l'ordine con cui sono valutati.
Associatività | Operatori | Informazioni aggiuntive |
---|---|---|
non associativi | clone new | clone e new |
sinistra | [ | array() |
destra | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | types and increment/decrement |
non associativi | instanceof | tipi |
destra | ! | operatori logici |
sinistra | * / % | operatori aritmetici |
sinistra | + - . | operatori aritmetici e operatori su stringhe |
sinistra | << >> | operatori sui bit |
non associativi | < <= > >= | operatori di confronto |
non associativi | == != === !== <> | operatori di confronto |
sinistra | & | operatori sui bit e riferimenti |
sinistra | ^ | operatori sui bit |
sinistra | | | operatori sui bit |
sinistra | && | operatori logici |
sinistra | || | operatori logici |
sinistra | ? : | Operatore ternario |
sinistra | = += -= *= /= .= %= &= |= ^= <<= >>= => | operatori di assegnazione |
sinistra | and | operatori logici |
sinistra | xor | operatori logici |
sinistra | or | operatori logici |
sinistra | , | diversi usi |
Per operatori con uguale precedenza, l'associazione a sinistra indica che l'espressione viene valutata da sinistra verso destra, e l'associazione destra indica il contrario.
Example #1 Associatività
<?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
// mescolare ++ e + produce un comportamento indefinito
$a = 1;
echo ++$a + $a++; // può stampare 4 o 5
?>
Nota:
Sebbene = abbia una precedenza minore rispetto alla maggior parte degli altri operatori, PHP permette comunque espressioni simili alla seguente: if (!$a = foo()), in questo caso l'output di foo() viene inserito in $a.