Forum und email

Operátorok

Table of Contents

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.

Operátorok precedenciája
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 
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
?>
Használj zárójeleket, hogy olvashatóbb legyen a kódod!

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.