Aritmetické operácie Ako každý iný jazyk aj php používa základné matematické operátory:
| + | sčítanie | 9 + 4 | Spočíta súčet 9 a 4 s výsledkom 13. |
| - | odčítanie | 9 - 4 | Spočíta rozdiel medzi 9 a 4 s výsledkom 5. |
| * | násobenie | 9 * 4 | Spočíta súčin medzi 9 a 4 s výsledkom 36. |
| / | delenie | 9 / 4 | Spočíta podiel medzi 9 a 4 s výsledkom 2,25. |
| % | zostatok | 9 % 4 | Spočíta zostatok po celočíselnom delení 9/4 s výsledkom 1. |
Operátory pre zmenu hodnoty
Znamienko mínus (-) sa taktiež používa s jedinou numerickou hodnotou pre zmenu znamienka (tzn. pri záporných číslach na kladné a opačne) a vždy musí byť uvedené pred operandom ktorý chcem zmeniť.
| $c = 4; |
| $d = -$c; // -4 |
| $e = -9; |
| $f = -$e; // 9 |
Operátory priradené k premennej
Táto časť nie je ani tak dôležitá kvôli významu ktorý vyplýva už z predošlého článku ale dôraz na ňu dávam preto, lebo množstvo začínajúcich programátorov v PHP si mýli (=) s (==). Tieto dva zápisy hodne programátorov pomýlia a potom dlhé kódy aplikácií prechádzajú dlhé hodiny s tým, že nedokážu prísť na banálnosť chyby, ktorú však prehliadajú práve pre jej príbuznosť zápisu.
Už na začiatku v predošlom článku som sa snažil vysvetliť, že premenná naberá hodnotu až vtedy, keď je ňou definovaná. Teda:
| $a = 4; |
| $meno = "jano"; |
| $time = "15:25"; |
Toto platí pre určenie len jedným znamienkom rovná sa (priradenie). Tu chcem upozorniť, dávajte si veľký pozor, pretože dve znamienka rovná sa sú operátorom porovnania, ktoré budete často využívať v podmienkach a vďaka nim dokážete určiť či hodnota a = b alebo naopak nie. Teda:
| if(5 == 5) | |
| { | |
| echo "hodnoty sú zhodné"; | |
| } | |
| else | |
| { | |
| echo "hodnoty zhodné nie sú"; | |
| } |
Operátory porovnania
Operátory porovnania sa používajú logicky na testovanie podmienok. Výsledkom porovnania bude vždy pravda (TRUE) alebo nepravda (FALSE). Príkladom:
| $e = 9; |
| if($e > 7) echo "Výsledok porovnávania je TRUE a tento riadok sa vypíše"; |
| if($e < 7) echo "Výsledkom porovnávania je FALSE a tento riadok sa nikdy nevypíše"; |
Operátory porovnania si zhrnieme v tabuľke:
| == | rovnosť | $e == $d | Bude pravda ak $e a $d majú rovnakú hodnotu |
| < | menší | $e < $d | Bude pravda ak $e je menšie od $d |
| > | väčší | $e > $d | Bude pravda ak $e je väčšie od $d |
| <= | menší alebo rovnaký | $e <= $d | Bude pravda ak $e je menšie alebo rovné $d |
| >= | väčší alebo rovnaký | $e >= $d | Bude pravda ak $e je väčšie alebo rovné $d |
| != | nerovnosť | $e != $d | Bude pravda ak $e je rozdielne od $d |
| < > | nerovnosť | $e <> $d | Bude pravda ak $e je rozdielne od $d |
Ešte raz by som chcel na Vás apelovať, pamätajte operátor (=) priradenia nie je zhodný s operátorom (==) porovnania a teda plní každý inú funkciu. Výsledok zámeny týchto operátorov:
| $e = 9; |
| if($e = 7) echo "Tento riadok sa vypíše vždy, lebo podmienka splnená bola keďže sme premennej $e zmenili hodnotu priamo v podmienke a teda potrebný efekt porovnanie sa neprejaví"; |
| $e = 9; |
| if($e == 7) echo "Takto vyzerá dobrý zápis porovnania, i keď sa tento text nevypíše"; |
K tomuto by som rád ešte podotkol jednu drobnosť, ktorá nebola dlho jasná jednému kamarátovi.
| if(7 == 7.00) echo "Toto je pravda, keďže ako sme si povedali v minulom článku aj desatinné číslo s rovnakou hodnotou je v podstate rovnaká hodnota, ako celé číslo, takže sa nuly desatinného čísla pri počítaní \"odstránia\"; |
| if(7 == 7.54) echo "Toto už pravdou nie je, keďže bolo desatinné číslo naplnené hodnotou rozdielnou od nuly"; |
Ak sa však v budúcnosti stane, že predsa len budete potrebovať rozlíšiť hodnoty 7 a 7.00, musíte porovnávať ich typ ako premennej a nie len samotnú hodnotu.
| $e = 7; |
| $d = 7.00; |
| if ($e == $d) echo "Výsledkom je pravda, o tomto sme si už povedali vyššie"; |
| if (($e == $d) && (gettype($e) == gettype($d))) echo "Tento krát sa táto podmienka nevypíše lebo funkcia gettype vracia aj typ premennej a keďže je $e celé číslo a $d desatinné ich typ sa nezhoduje, tým pádom je výsledok FALSE"; |
Rada z vlastnej skúsenosti: Ak máte chybu v zápise a použili ste niekde v aplikácii operátor porovnania určite sa najskôr pozrite tam, najčastejšie je chyba práve tu. Mne sa to stávalo denne, momentálne si už dávam veľký pozor, lebo pri kóde na niekoľko desiatok či stoviek strán nie je "med lízať" hľadať chybu i keď php ma veľmi dobre vyvinutý rozpoznávací mechanizmus a teda sa ľahko dozviete na ktorom riadku je aká chyba, ale o tom neskoršie.
Logické operátory
Logické operátory sa používajú, aby mohlo byť viacero podmienok byť v závere vyhodnotených ako jedna a teda sme nemuseli mať zbytočné množstvo kódu, ktorý dokáže rovnakú vec urobiť v jedinom zápise. Je niekoľko typov logických operátorov, logické "a" vráti TRUE len v prípade, keď sú splnené všetky podmienky, logické "alebo" vráti TRUE len v prípade ak jedna z podmienok je vyhodnotená ako pravda a logické "ani" vráti TRUE len vtedy, ak nebola splnená ani jedna z uvedených podmienok. V tabuľke nižšie sú tieto operátory uvedené spolu aj s príkladmi:
| $e && $f | logické "a" | Bude vrátená TRUE v prípade že obe podmienky boli splnené |
| $e || $f | logické "alebo" | Bude vrátená TRUE v prípade že jedna z podmienok bola splnená |
| $e and $f | logické "a" | Bude vrátená TRUE v prípade že obe podmienky boli splnené |
| $e or $f | logické "alebo" | Bude vrátená TRUE v prípade že jedna z podmienok bola splnená |
| $e xor $f | exkluzívne "alebo" | Bude vrátená TRUE v prípade že jedna z podmienok bola splnená, ale v žiadnom prípade obe naraz!! |
| ! $e | negácia | $e bude vyhodnotené ako nepravda |
Všimnite si jednu dôležitú vec a to že existujú dva operátory pre vyhodnocovanie logického "a" a logického "alebo" plus exkluzívne "alebo". Tieto operátory sa síce chovajú podobne ale majú inú prioritu, čo značí, že v podmienke budú vykonané v inom poradí ako by ste možno chceli a teda sa vyhodnotí niektorá podmienka skôr ako tá druhá. Viac si o tomto probléme povieme neskôr, možno toho bude až na jeden článok :o).
Predostriem tu pár príkladov, ktoré by Vám mali pomôcť ozrejmiť problematiku operátorov.
| $d = 4; |
| $e = 7; |
| $f = 10; |
| if($d == 4 && $e == 7 && $f == 10) echo "Toto sa vypíše"; |
| Všetky podmienky sú vyhodnotené ako pravda a tak sa funkcia echo prevedie. |
| if($d == 4 or $e == 9) echo "Toto sa vypíše"; |
| Ak si pozriete operátor or v tabuľke vyššie vidíte že je podmienka splnená a tak sa opäť funkcia echo prevedie. |
| if($d == 4 xor $ == 7 xor $f == 10) echo "Toto sa nevypíše"; |
| Táto podmienka nebude splnená, pretože je prepojená operátorom xor a teda celá podmienka je nepravdivá. Podmienky xor vyžadujú, aby práve jedna z podmienok bola pravdivá a teda zvyšné dve už nie. |
| if !($d == 4 && $e == 7 && $f == 10) echo "Toto sa nevypíše"; |
| Tu som sa snažil demonštrovať operátor negácie. Možno sa Vám zdá, že je tento operátor zbytočný, ale verte mi, že niekedy je ho absolútne nevyhnutné použiť ho a to napríklad v prípadoch, keď zbierame dáta z formulárov alebo od užívateľov a potrebujeme overiť ich pravdivosť. |
Operátory pre spájanie reťazcov
V PHP sa ako operátor pre spájanie reťazcov používa bodka (.). Bodka dokáže spojiť akékoľvek dva reťazce, avšak ako všetko v PHP má aj tento operátor svoje pravidlá použitia.
| $rokov = 15; |
| echo "Janko mal ". $rokov . " rokov"; |
Tu vidíte ako sa dá spojiť časť reťazca zároveň s premennou. Môžete kľudne namietať, že sa táto premenná dala zapísať aj medzi úvodzovky, avšak napríklad na sprehľadnenie skriptu je tento zápis najúčinnejší. Toto je však asi najdrobnejšia výhoda zápisu.
Tento operátor sa často využíva pre spájanie dlhých reťazcov ako napríklad:
| $mail = "Ahoj Peťo, chcel som ti povedať, že dnes určite dokončím tento článok ". |
| "napriek časovému sklzu ktorý s ním mám a dúfam že dostatočne zaujme čitateľov ". |
| "a samozrejme aj teba. Maj sa zatiaľ pekne, potom ti ho pošlem"; |
Tu môžete vidieť jeden príklad využitia, kde potrebujete aby bol text dostatočne prehľadný. V programovaní musíte dbať aj na pohodlie a priehľadnosť, lebo je veľmi pravdepodobné, že po Vás alebo s Vami začne na skripte pracovať niekto iný, alebo ho otvoríte po dlhej dobe a nebude sa v ňom vôbec vedieť vyznať a bude Vám trvať veľmi dlhú dobu kým si ho opäť celý naštudujete.
To je na dnes všetko. Nabudúce budeme pokračovať v tejto téme, ktorá ako si ja myslím je jedna z najdôležitejších pre začiatky v programovaní, pretože sa s operátormi budete stretávať každý deň (ak budete denne programovať ;o) )
Ďakujem za priazeň a teším sa na skoré stretnutie pri ďalšom z článkov.
Ak budete mať akékoľvek problémy s programovaním v php napíšte na fórum HelfniMi na adrese http://forum.helfnimi.com
Rastislav Turek // http://forum.helfnimi.com