Operátorok
Table of Contents
- Aritmetikai operátorok
- Hozzárendelő operátorok
- Bitorientált operátorok
- ÖsszehasonlÃtó operátorok
- Hibakezelő operátorok
- Végrehajtó operátorok
- Növelő/csökkentő operátorok
- Logikai operátorok
- String operátorok
- Tömb operátorok
- TÃpus operátorok
Az operátor egy olyan dolog, aminek adsz egy vagy több értéket (vagy szakmai nyelven: kifejezést), ami kiad egy másik értéket (úgy hogy a kapott konstrukció kifejezéssé alakuljon). Tehát úgy gondolhatsz a függvényekre és az olyan konstrukciókra, amelyek értéket adnak vissza (pl. print), mint operátorok, azokra pedig, amelyek nem adnak vissza semmit (pl. echo), mint valami másféle dolgokra.
Három féle operátor létezik. Az elsÅ‘ fajta operátor az unáris, amely csak egy értékkel dolgozik, például a ! (a negációs operátor) vagy ++ (a növelÅ‘ operátor). A második csoportot a bináris operátorok képviselik; ez a csoport foglalja magába a PHP által nyújtott operátorok közül a legtöbbet, találsz ezekrÅ‘l egy listát lejjebb az Operátorok precedenciája cÃmű részben.
A harmadik kategória a ternáris operátoré: ?:. Ezt arra érdemes használni, hogy válasszunk két kifejezés közül egy harmadik kifejezéstől függően, inkább mintsem két mondat vagy két végrehajtási út között. A ternáris kifejezések bezárójelezése igen jó ötlet.
Operátorok precedenciája
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 alábbi táblázat az operátorokat precedenciájuk szerint csökkenő sorrendben tartalmazza.
asszociativitás | operátorok | egyéb információ |
---|---|---|
nem köthető | new | new |
jobbról balra | [ | array() |
nem köthető | ++ -- | növelő/csökkentő operátorok |
nem köthetÅ‘ | ! ~ - (int) (float) (string) (array) (object) @ | tÃpusok |
balról jobbra | * / % | aritmetikai operátorok |
balról jobbra | + - . | aritmetikai operátorok és string operátorok |
balról jobbra | << >> | bitorientált operátorok |
nem köthetÅ‘ | < <= > >= | összehasonlÃtó operátorok |
nem köthetÅ‘ | == != === !== | összehasonlÃtó operátorok |
balról jobbra | & | bitorientált operátorok és referenciák |
balról jobbra | ^ | bitorientált operátorok |
balról jobbra | | | bitorientált operátorok |
balról jobbra | && | logikai operátorok |
balról jobbra | || | logikai operátorok |
balról jobbra | ? : | a ternáris operátor |
jobbról balra | = += -= *= /= .= %= &= |= ^= <<= >>= | értékadó operátorok |
balról jobbra | and | logikai operátorok |
balról jobbra | xor | logikai operátorok |
balról jobbra | or | logikai operátorok |
balról jobbra | , | sokféle használat |
[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.]
A balról jobbra asszociativitás azt jelenti, hogy a kifejezés kiértékelése balról jobbra történik, a jobbról balra pedig ennek az fordÃtottját.
Example#1 Asszociativitás
<?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: Annak ellenére, hogy a ! operátornak nagyobb a precedenciája, mint a = operátornak, a PHP elfogadja az ehhez hasonló kifejezéseket is: if (!$a = ize()), ebben az esetben az ize() által visszaadott érték $a-ba kerül bele.