Az operátorok precedenciája azt határozza meg, hogy milyen "szorosan" köt össze két kifejezést. Például az 1 + 5 * 3 kifejezésben, a kifejezés értéke 16, és nem 18, mert a szorzás operátorának, a ("*")-nak nagyobb precedenciája van, mint az összeadásénak ("+"). Zárójelek segítségével tetszőleges precedenciát lehet felállítani egy kifejezésen belül, ha szükséges. Például a (1 + 5) * 3 eredménye 18 lesz.
[Az asszociativitás talán megér egy kis magyarázatot. Ez azt határozza meg, hogy az adott szinten levő operátorok egymás utáni, zárójel nélküli használatát hogyan értelmezi a fordító. Egy példán keresztül talán érthetőbbé válik: 1-2+3 értelmezhető (1-2)+3-nak (= 2), vagy 1-(2+3)-nak (= -4). Az előbbi kiértékelés, amely balról jobbra asszociatív, a helyes ebben az esetben. A második kiértékelés pedig jobbról balra asszociatív - ilyen lenne például a hatványozás, amely nincs a nyelvben implementálva (erre szolgál pow()). Ha a ** lenne a hatványozás, akkor a 2**3**2 helyesen 2 a 9-en = 512 lenne. Vannak nem köthető (nem asszociatív) operátorok is, ilyenek az összehasonlító operátorok. A PHP-ban tehát nem értelmes a 2<$x<4 kifejezés.]
Az alábbi táblázat az operátorokat precedenciájuk szerint növekvő sorrendben tartalmazza.
Táblázat 11-1. Operátorok precedenciája
asszociativitás | operátorok |
---|---|
balról jobbra | , |
balról jobbra | or |
balról jobbra | xor |
balról jobbra | and |
jobbról balra | |
balról jobbra | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
balról jobbra | ? : |
balról jobbra | || |
balról jobbra | && |
balról jobbra | | |
balról jobbra | ^ |
balról jobbra | & |
nem köthető | == != === !== |
nem köthető | < <= > >= |
balról jobbra | << >> |
balról jobbra | + - . |
balról jobbra | * / % |
jobbról balra | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
jobbról balra | [] |
nem köthető | new |