Poglavje 9. Izrazi

Izrazi so najpomembnejši del PHP-ja. V PHP-ju je skoraj vse kar napišete izraz. Najenostavnejša, a tudi najbolj točna definicija izraza je: "vse kar ima neko vrednost".

Najbolj osnovne oblike izrazov so konstante in spremenljivke. Ko zapišete "$a = 5", dodeljujete vrednost '5' v spremenljivko $a. '5', očitno, ima vrednost 5, ali v drugih besedah, '5' je izraz z vrednostjo 5 (v tem primeru je '5' številska konstanta).

Po tej dodelitvi, bi pričakovali, da bo vrednost spremenljivke $a enaka 5. Pravtako, če bi zapisali $b = $a, bi pričakovali, da se bo obnašalo kot če bi zapisali $b = 5. Z drugimi besedami, tudi $a je izraz, ki ima vrednost 5. Če vse deluje pravilno, se bo ravno to zgodilo.

Malenkost bolj zahtevni primer za izraz so funkcije. Kot primer, upoštevajte naslednjo funkcijo:

function foo ()
{
    return 5;
}

Če predvidevamo, da ste seznanjeni s konceptom funkcij (če niste, si oglejte poglavje o funkcijah), bi predvidevali da ko zapišete $c = foo(), je to pravzaprav enako, kot če bi zapisali $c = 5 - kar je popolnoma pravilno. Funkcije so izrazi, ki imajo vrednost vrnjene vrednosti funkcije. Ker foo() vrne 5, je vrednost izraza 'foo()' enaka 5. Ponavadi funkcije ne vrnejo neke statične vrednosti, ampak vrnejo neko izračunano vrednost.

Seveda, za vrednosti v PHP-ju ne velja, da morajo biti številke in velikokrat to tudi niso. PHP podpira tri skalarne tipe vrednosti: številske vrednosti, plavajočo vejico in niz (skalarne vrednosti so vrednosti, ki ji ne moremo 'razbiti' na manjše dele, kar recimo ne velja za polja). PHP podpira tudi dva neskalarna tipa: polja in objekti. Vsak od teh tipov vrednosti je lahko dodeljen neki spremenljivki, ali vrnjen iz neke funkcije.

Do sedaj, uporabniki PHP/FI 2 nebi smeli čutiti nobene spremembe. Vseeno, PHP nadgrajuje izraze, tako kot ostali programski jeziki. PHP je izrazni jezik v tem pomenu besede, da je skoraj vse, kar zapišemo, izraz. Upoštevajte primer, ki smo ga že imeli, '$a = 5'. Zlahka opazimo, da sta tukaj dve vrednosti, vrednost številske konstante in vrednost spremenljivke $a kateri je bila dodeljena vrednost 5. V resnici pa je tu še ena vrednost - vrednost samega prireditvenega stavka. Prireditveni stavek sam, dobi vrednost same prireditve, v tem primeru 5. V praksi to pomeni, da je '$a = 5', karkoli še naredi, izraz z vrednostjo 5. Kar pomeni, da če zapisemo '$b = ($a = 5)', je enako zapisu '$a = 5; $b = 5;' (podpičje označuje konec stavka). Ker so pripreditveni stavki razčlenjeni od desne proti levi, lahko zapišemo to tudi kot '$b = $a = 5'.

Drugi dober primer izraza je pred- in po-povečanje in manjšanje. Uporabniki PHP/FI 2, kot tudi drugih jezikov, so verjetno seznanjeni z notacijo spremenljivka++ in spremenljivka--. To sta operatorja za povečanje in pomanjšanje. V PHP/FI 2 stavek '$a++' nima nobene vrednosti (ni izraz) in ga zato tudi ne moremo prirediti na noben način. PHP izboljša sposobnost povečevanja/manjšanja s tem, da tudi to postane izraz, tako kot v programskem jeziku C. V PHP-ju, kot v C-ju, obstajata dva tipa povečevanja. - pred-povečevanje in po-povečevanje. Oba povečata spremenljivko in efekt na spremenljivko je v obeh primerih enak. Razlika je v tem, da pred-povečanje, zapisano kot '++spremenljivka', vrne povečano vrednost (PHP poveča spremenljivko, preden prebere njeno vrednost, od tu ime pred-povečanje). Po-povečanje, katerega zapišemo kot 'spremenljivka++', vrne vrednost spremenljivke pred povečanjem (PHP poveča vrednost spremenljivke šele ko jo prebere).

Zelo pogosti tip izraza je primerjalni izraz. Te izrazi lahko vrnejo vrednost 0 ali 1, kar pomeni FALSE ali TRUE. PHP podpira > (večji kot), >= (večji kot ali enak), == (enak), != (neenak), < (manjšsi kot) in <= (manjši kot ali enak). Te izrazi so najbolj pogosto uporabljeni znotraj pogojnih stavkov, kot so if stavki.

Zandji primer izrazov, ki jih bomo obdelali v tem poglavju je kombiniran z opreratorjem in dodelitvenim izrazom. Kot že veste, če želite $a povečati za 1, lahko enostavno napišete '$a++' ali '++$a'. Kaj se pa zgodi, če bi želeli povečati spremenljivko za recimo 3? Lahko bi napisali '$a++' trikrat in dobili željeni rezultat, a to ni najbolj učinkovita ali zadovoljiva rešitev. V praksi se uporablja '$a = $a + 3'. '$a + 3' vrne vrednost spremenljivke $a plus 3 in jo vrne nazaj v $a, kar pomeni, da se $a poveča za 3. V PHP-ju, kot tudi v drugih programskih jezikih, lahko to zapišemo krajše, kar bi čez čas bilo bolj jasno in lažje za razumeti. Torej, če želimo vrednost spremenljivke $a povečati za 3, preprosto zapišemo '$a += 3'. To pomeni: "vzemi vrednost spremenljivke $a, jo povečaj za 3 in dodeli dobljeno vrednost nazaj v spremenljivko $a". Poleg tega, da je ta način krajši in lažji, je tudi hitrejši. Vrednost '$a += 3', kot vrednost navadnega dodelitvenega izraza, je dodeljena vrednost. Zapomnite si, da to NI 3, ampak skupna vrednost od $a + 3 (to ni vrednost, ki je dodeljena spremenljivki $a). Uporabljate lahko tudi druge operatorje, kot naprimer '$a -= 5' (odšteje 5 od vrednosti spremenljivke $a), '$b *= 7' (množi vrednost spremenljivke $b z 7), itd.

Obstaja še en izraz, ki se vam bo mogoče zdel čuden, če ga še niste srečali v drugih jezikih - trojni pogojni operator:

$prvi ? $drugi : $tretji

Če je vrednost prvega podizraza TRUE (ni nič), potem se izvede drugi podizraz, kar postane rezultat pogojnega izraza. V nasprotnem primeru se izvede tretju podizraz, kar postane rezultat pogojnega izraza.

Spodnji primer bi vam moral pomagati malo bolje razumeti pred-, po-povečanje in izraze na splosno:

function double($i)
{
    return $i*2;
}
$b = $a = 5;        /* dodeli vrednost 5 v spremenljivke $a in $b */
$c = $a++;          /* po-povecanje - dodeli originalno vrednost $a  
                       (5) v $c */
$e = $d = ++$b;     /* pred-povecanje, dodeli povecano vrednost spremenljivke  
                       $b (6) v $d in $e */

/* v tej tocki, sta $d in $e enaka 6 */

$f = double($d++); /* dodeli dvakrat vecjo vrednost spremenljivke $d,
                       <emphasis>preden</emphasis> jo povecamo, 2*6 = 12 v $f */
$g = double(++$e);  /* dodeli dvakrat vecjo vrednost spremenljivke $e,
                       <emphasis>po</emphasis> povecanju, 2*7 = 14 v $g */
$h = $g += 10;      /* $g je prvo povecan za 10 s cimer dobi vrednost 24.
                       Vrednost je potem dodeljena spremelnjivki $h,
                       ki ima potem pravtako vrednost 24 */

V začetku tega poglavja smo zapisali, da bomo opisali različne tipe stavkov in kot obljubljeno, izraz je lahko stavek. A vseeno, ni vsak izraz stavek. V tem primeru ima stavek obliko 'izraz' ';', to je izraz ki mu sledi podpičje. V '$b=$a=5;', $a=5 je veljaven izraz, ampak ni stavek sam po sebi. '$b=$a=5;' pa je veljaven stavek.

Zadnja stvar, ki bi bila vredna omembe je resnična vrednost izraza. V veliko primerih, večinoma v pogojnem izvajanju ali zankah, vas ne zanima toliko sama vrednost izraza, ampak samo ali je ta izraz TRUE ali FALSE. Konstante TRUE in FALSE (majhne ali velike črke) sta dve najbolj verjetne boolean vrednosti. Ko je potrebno, se izraz avtomatsko konvertira v boolean vrednost. Poglejte si section about type-casting za več informacij o tem.

PHP zagotavlja popolno implementacijo izrazov in če bi želeli dokumentirati vse možnosti in načine uporabe, bi bilo to preveč za ta priročnik. Zgornji primeri naj bi vam dali idejo kaj izrazi so in kako sestaviti uporabne izraze. Skozi ta priročnik bomo, ko bomo želeli poudariti veljaven PHP izraz, zapisali to kot expr.