PHP izrazi i operatori
Kao i veliki broj jezika koji vuku poreklo iz jezika C, i jezik PHP je zasnovan na izrazima (expressions). To znači da izrazi i njova evaluacija u stvari predstavljaju osnovnu komponentu programskog jezika.
U izrazima učestvuju dva tipa elemenata: operandi i operatori. Operandi (konstante, promneljive, pozivi funkcija) su vrednosti sa kojima se radi, dok su operatori oznake operacija koje se izvode (sabiranje, moženje, upoređivanje...).
Da bi izraz kao celina imao vrednost, moraju je imati i svi operandi u trenutku evaluacije (izračunavanja) izraza.
Aritmetički operatori
Ovi operatori rade sa numeričkim vrednostima. Ako zadate vrednosti nisu numeričke, PHP će prvo pokušati da ih konvertuje.
-$x | negacija $x (promena znaka) |
$x + $y | zbir $x i $y (sabiranje) |
$x - $y | razlika $x i $y (oduzimanje) |
$x * $y | proizvod $x i $y (množenje) |
$x / $y | količnik $x i $y (deljenje) |
$x % $y | modulus $x i $y (ostatak celobrojnog deljenja) |
$x ** $y | eksponent $x na $y (stepenovanje) |
Operacija deljenja vraća racionalan broj (float), osim u slučaju ako su vrednosti deljive jedna drugom.
Ostatak celobrojnog deljenja je definisan samo nad celim brojevima, tako da, čak iako su operandi racionalni, radi samo sa njihovim celim delovima ("otkida" decimale). Rezultat će imati znak prvog operanda.
Operatori uvećanja i umanjenja
Operatori inkrementacije (uvećanja) i dekrementacije (umanjenja), su primarno numerički (celobrojni), iako se mogu koristiti i sa drugim tipovima. U pitanju su unarni operatori - ne povezuju dva operanda već se primenjuju samo na jedan.
Specifični su po tome što ne samo da vraćaju vrednost, već i menjaju vrednost operanda. Operand se uvećava/umanjuje za jedan. To znači da operand mora biti promenljiva.
++$x | prefiksno uvećanje $x |
--$x | prefiksno umanjenje $x |
$x++ | postfiksno uvećanje $x |
$x-- | postfiksno umanjenje $x |
Prefiksno uvećanje/umanjenje znači da se prvo poveća (umanji) vrednost promenljive, a onda takva uvećana vrednost učestvuje u izrazu.
Postfiksno uvećanje/umanjenje znači da se u izrazu koristi originalna vrednost promenljive, a onda se tek njena vrednost menja.
Relacioni operatori
Ovi operatori suštinski predstavljaju upoređivanja operanda. Mogu se upoređivati operandi različitih tipova, s tim što se tipovi konvertuju ako je moguće. Tekstualni podaci se takođe mogu upoređivati i poštuje se redosled po kodnom rasporedu što znači da je "A" manje od "B" ali i "B" manje od "a".
$x < $y | TRUE ako je $x manje od $y |
$x > $y | TRUE ako je $x veće od $y |
$x <= $y | TRUE ako je $x manje ili jednako od $y |
$x >= $y | TRUE ako je $x veće ili jednako od $y |
$x == $y | TRUE ako je $x jednako $y (kada se konvertuju tipovi) |
$x != $y | TRUE ako je $x različito od $y (kada se konvertuju tipovi) |
$x <> $y | TRUE ako je $x različito od $y (kada se konvertuju tipovi) |
$x === $y | TRUE ako je $x jednako $y i ako su istog tipa |
$x !== $y | TRUE ako je $x različito od $y ili nisu istog tipa |
Jednakost racionalnih brojeva
Nikada ne upoređujte da li su dva float broja jednaka. Ono što mi mislimo da je isto, (npr. 2==2) zbog beleženja u memoriji, za PHP može biti sasvim različito (1.9999999 == 2.0000001).
Da biste ispitali jednakost dva broja u pokretnom zarezu, morate usvojiti pojam tačnosti. Npr. "dva broja su jednaka uz tačnost od 0.00001".
Pogledajte kako bismo na ispravan način uporedili dva float-a.
<?php
$epsilon = 0.000001;
$x = 2;
$y = 9 / 4.5;
// if ($x==$y) // NEISPRAVNO
if ( ($x-$y) < $epsilon ) {
// JEDNAKI
}
else {
// RAZLIČITI
}
?>
Logički operatori
Logički operatori služe za formiranje kompleksnih uslova. Njihovi operandi su logičke vrednosti (true i false).
!$x | TRUE ako ne važi $x (negacija) |
$x && $y | TRUE ako važi $x i važi $y (konjukcija) |
$x || $y | TRUE ako važi $x ili važi $y (disjunkcija) |
$x AND $y | TRUE ako važi $x i važi $y (konjukcija) ali sa slabim prioritetom |
$x OR $y | TRUE ako važi $x ili važi $y (disjunkcija) ali sa slabim prioritetom |
$x XOR $y | TRUE ako važi samo $x ili važi samo $y (ekskluzivna disjunkcija) sa slabim prioritetom |
Iako operatori AND i OR funkcionišu isto kao i operatori && i ||, imaju mnogo niži prioritet (niži čak i od operatora dodele!) - prema tome, pazite se.
Operator konkatenacije
Ovo je jedini operator namenjen striktno radu sa stringovima. Služi da poveže dva stringa u jedan.
$x . $y | povezan string, sastavljen od stringova $x i $y |
Operacije nad bitovima
Oberacije nad bitovima manipulišu nad samim bitovima celobrojnih operanda. Rezultat je numeričkog tipa, ali same operacije tretiraju bitove dva broja kao logičke vrednosti (1 kao true, 0 kao false).
~$x | negacija bitova $x ("obrće" bitove) |
$x & $y | AND-ovanje bitova $x i $y |
$x | $y | OR-ovanje bitova $x i $y |
$x ^ $y | XOR-ovanje bitova $x i $y |
$x << $y | šiftovanje bitova $x ulevo za $y mesta |
$x >> $y | šiftovanje bitova $x udesno za $y mesta |
Operatori dodele
Operatori dodele služe da se neka vrednost (sa desne strane) operatora, dodeli promenljivoj (sa leve strane operatora). To znači da se sa leve strane uvek mora naći promenljiva.
promenljiva = vrednost;
Veliki broj operatora se može kombinovati sa operatorom dodele i tako dobijamo kompleksne operatore dodele, koji skraćuju pisanje programa. Sledeće dve linije programa su u stvari ista stvar:
$p += vrednost;
$p = $p + vrednost;
$x = $y | $x dobija vrednost $y |
$x += $y | $x dobija vrednost zbira $x i $y |
$x -= $y | $x dobija vrednost razlike $x i $y |
$x *= $y | $x dobija vrednost proizvoda $x i $y |
$x /= $y | $x dobija vrednost količnika $x i $y |
$x %= $y | $x dobija vrednost modulusa $x i $y |
$x .= $y | $x dobija vrednost povezivanja stringova $x i $y |
$x &= $y | $x dobija vrednost AND-ovanja bitova $x i $y |
$x |= $y | $x dobija vrednost OR-ovanja bitova $x i $y |
$x ^= $y | $x dobija vrednost XOR-ovanja bitova $x i $y |
$x <<= $y | $x dobija vrednost $x sa šiftovanim bitovima ulevo za $y mesta |
$x >>= $y | $x dobija vrednost $x sa šiftovanim bitovima udesno za $y mesta |
I dodela je operacija
I dodela je operacija, što znači da ima vrednost. Vrednost operacije dodele je jednaka vrednsoti koja se dodeljuje, što znači:
<?php
$x = 5; // sve ukuono ima takođe vrednost 5
// znači da možemo napisati i:
$y = $x = 5; // $x postaje 5, a onda i $y postaje 5
// što je isto kao:
$x = 5;
$y = 5;
// moguće je i nešto ovako:
$y = ($x = 5) + 3; // $x postaje 5, a onda $y postaje 5+3, tj. 8
?>
Operator izbora
Ovo je jedini ternarni (povezuje tri operanda) operator u jeziku PHP. Služi da napravi izbor između dve vrednosti - ima vrednost drugog, odnosno trećeg operanda, zavisno od logičke vrednosti prvog operanda.
Prvi operand ima logičku vrednost, a drugi i treći bilo kakvu (čak i ne moraju da budu istog tipa).
$x ? $y : $z | ako je $x TRUE, ima vrednost $y, u suprotnom vrednost $z |
- PHP.net, Expressions
- PHP.net, Operators