PHP kézikönyv
Előző |  | Következő

# 14. Fejezet. Kifejezések

A kifejezések a PHP legfontosabb építőkövei. A PHP-ban majdnem minden, amit leírsz, egy kifejezés. A lehető legegyszerűbb és mégis pontos definíciója a kifejezésnek: "mindaz, amelynek értéke van".

A kifejezések legalapvetőbb formái az állandók és a változók. Az "$a = 5" az '5'-öt az $a változóhoz rendeli. Az '5'-nek nyilván 5 az értéke, vagyis más szavakkal az '5' olyan kifejezés, melynek értéke 5 (itt az '5' egy egész típusú állandó).

Ez után a hozzárendelés után $a értéke 5 kell legyen, sőt, $b = $a esetén az eredménynek azonosnak kell lennie azzal, mint $b = 5 esetén. Másképp megfogalmazva az $a olyan kifejezés, amelynek értéke 5. Ha minden jól megy, pontosan ez fog történni.

Kissé bonyolultabb példák a kifejezésekre a függvények. Például tekintsük az alábbi függvényt:

`<?php function ize() { return 5; } ?>`

Megelőlegezzük, hogy nem idegen Tőled a függvények koncepciója - ha nem így lenne, akkor olvasd el a függvényekről szóló fejezetet. Amint az elvárható, a $c = foo() lényegében azonos $c = 5 beírásával. A függvények olyan kifejezések, amelyeknek az értéke a visszatérési értékük. Mivel foo() 5-tel tér vissza, a 'foo()' kifejezés értéke 5. Általában a függvények nem arra használatosak, hogy egy bedrótozott számmal térjenek vissza, hanem valamilyen számolt származtatott értékkel.

Természetesen a változóknak a PHP-ben nem kell egésznek lenniük, és nagyon gyakran nem is azok. A PHP négy féle skalártípust támogat: egész (integer), lebegőpontos (float), sztring (string) és logikai (boolean) értékeket (skalárnak az számít, amit nem lehet kisebb darabokra bontani, eltérően - például - a tömböktől). A PHP két nem skalár típust is támogat: a tömb és objektum típust. Mindegyikükhöz lehet értéket rendelni, és mindegyikük lehet egy függvény visszatérési értéke.

A PHP továbbfejleszti a kifejezés fogalmát, ahogy azt sok hasonló nyelv teszi. A PHP egy kifejezés-orientált nyelv, abból a szempontból, hogy majdnem minden kifejezés. Tekintsük a példát, amivel eddig foglalkoztunk: '$a = 5'. Látható, hogy két értéket szerepel benne: az egész konstans '5' és $a értéke, amelyet az 5 értékkel frissítettünk. Az igazság azonban az, hogy még egy érték is van a kifejezésben, a magáé a hozzárendelésé. A hozzárendelés maga kiértékeli az átadandó értéket, ebben az esetben az 5-öt. Ez azt jelenti gyakorlatilag, hogy a '$a=5', a hatásától eltekintve egy kifejezés, amelynek az értéke 5. Ha ezért olyasmit írunk, hogy '$b=($a=5)', akkor az olyasmi, mintha '$a=5; $b=5;'-t írtunk volna (a pontosvessző jelöli az állítás végét). Mivel a hozzárendelés jobbról balra történik, ez írható zárójelek nélkül is: '$b=$a=5'.

A kifejezés-orientáltság másik jó példája az elő- és utónövekményes operátor. A PHP használóinak és sok más nyelvet használónak ismerős lehet a változó++ és változó-- jelölés. Ezek a növelő és csökkentő operátorok. A PHP/FI 2-ben a '$a++'-nek nincs értéke (mert nem kifejezés), és ezért nem is lehet semmihez hozzárendelni, vagy valamire használni. A PHP kiterjesztette az inkrementálás/dekrementálás lehetőségeit azzal, hogy ezeket is kifejezésekké alakította, mint ahogyan a C nyelvben is megtették. A PHP-ben a C nyelvhez hasonlóan kétféle növekményes operátor van: elő- és utó(növekményes). Mindkettő megnöveli a változó értékét, tehát a változó szempontjából nézve nincs különbség, a kifejezés értékében annál inkább. A '++$változó' formájú előnövekményes a megnövelt értéket adja vissza. (A PHP először növeli a változót, majd kiértékeli, innen jön az 'elő'). A '$változó++' alakú utónövekményes a változó eredeti értéket adja. (A PHP először kiértékeli, aztán növeli a változót, innen jön az 'utó'). [A csökkentő operátorokkal értelemszerűen ugyanez a helyzet.]

A kifejezések egy gyakori típusai az összehasonlító kifejezések. Ezen kifejezéseknek az értékei `FALSE` vagy `TRUE`. A PHP támogatja a > (nagyobb), >= (nagyobb, vagy egyenlő), == (egyenlő), != (nem egyenlő), < (kisebb) és a <= (kisebb, vagy egyenlő) operátorokat. A nyelv támogat még néhány szigorú ekvivalencia operátort: === (egyenlő és azonos típusú) és !== (nem egyenlő vagy nem azonos típusú). Ezeket a kifejezéseket általában feltételes kifejezésekben szokták használni. Ilyen pl. az if kifejezés.

Az utolsó példa, amivel itt foglalkozunk, a kombinált hozzárendelés-operátor kifejezés. Már tudhatod, hogy ha $a-t eggyel szeretnéd megnövelni, akkor egyszerűen írhatod, hogy '$a++' vagy '++$a'. Mi van akkor, hogy ha nem eggyel, hanem 3-mal kell megnövelni? Lehet háromszor egymás után írni, hogy '$a++', de ez nem valami hatékony és üdvözítő megoldás. Sokkal jobb gyakorlat az '$a=$a+3' használata. Ez kiértékeli az $a + 3-at, és hozzárendeli az $a-hoz, amelynek az lesz a végső eredménye, hogy $a értéke megnő hárommal. A PHP-ben - több más C-szerű nyelvhaz hasonlóan - ennél rövidebb formában is megadható: '$a+=3'. Ez pontosan azt jelenti, hogy "vedd $a értékét, és adjál hozzá hármat, és írd vissza az eredményt $a-ba". Amellett, hogy rövidebb és érthetőbb, még gyorsabb is. '$a+=3' értéke, mint egy normál értékadásé a hozzárendelt érték. Ez persze NEM 3, hanem $a + 3 (hiszen ezt az értéket rendeltük $a-hoz). Az összes többi kétoperandusú operátort lehet ilyenformán hozzárendelő-operátorként használni, például '$a-=5' (kivon 5-öt $a-ból), '$b*=7' (megszorozza $b-t 7-tel), stb.

Létezik még egy kifejezés, amely elég különösnek tűnhet, hacsak nem láttad már más nyelvekben: a háromoperandusú feltételes operátor:

`<?php $elso ? $masodik : $harmadik ?>`

Értéke: ha az első kifejezés értéke `TRUE`(nem nulla), akkor a második részkifejezés, egyébként a harmadik részkifejezés. Egy segítő példa:

`<php $b = $todo == 'növel' ? $a+5 : $a-5; // $b $a+5 lesz, ha $todo értéke 'növel' // egyébként $b $a-5 lesz ?>`

Ez megegyezik az alábbi kóddal:

    <?php
    if ($todo == 'növel') $b = $a+5 else $b = $a-5;
    ?>

Az alábbi példa segíthet az elő- és utónövekményes illetve csökkentő operátorok és kifejezéseik jobb megértésében:

`<?php
function duplaz($i)
{
return $i*2;
}
$b = $a = 5; /*ötöt rendelünk $a és $b változókhoz */
$c = $a++; /* utónövekményes, $c 5 lesz, mert
először $a kiértékelődik, csak aztán nő */
$e = $d = ++$b; /* előnövekményes, $b növelt értéke (6)
adódik tovább $d-nek és $e-nek */
/* itt $d és $e hat */
$f = duplaz($d++); /* $d kétszeresének hozzárendelése mielőtt
inkrementálódik, 2*6 = 12 lesz $f */
$g = duplaz(++$e); /* $e kétszeresének hozzárendelése miután
inkrementálódik 2*7=14 lesz $g */
$h = $g += 10; /* először $g 10-zel nő, így 24 lesz az értéke,
ez adódik tovább $h-nak, az is 24 lesz*/
?>`

Egyes kifejezések tekinthetők utasításoknak. Ebben az esetben egy utasítás 'kif' ';' alakú, vagyis kifejezés utána pontosvesszővel. A '$b=$a=5;'-ben $a=5 érvényes kifejezés, de nem érvényes utasítás önmagában. A teljes '$b=$a=5;' már igen.

Még egy említésre méltó dolog a kifejezések igaz értéke. Sok esetben főleg feltételes elágazásokban és ciklusokban, nem igazán érdekes, hogy a kifejezésnek mi az értéke, csak az, hogy igaz (`TRUE`) vagy hamis (`FALSE`). A `TRUE` és `FALSE` konstansok (nevük nem függ a kis- és nagybetűs írásmódtól) a PHP két lehetséges logikai értékei. Amikor szükséges, a kifejezések automatikusan logikai értékké alakulnak. Lásd a típuskonverziókról szóló fejezetet további részletekért.

A PHP a kifejezések egy teljes és hatékony megvalósítását biztosítja, és teljes dokumentációja meghaladja e kézikönyv kereteit. A fenti példák rávilágítanak, hogy mi is az a kifejezés, és hogyan kell létrehozni hasznos kifejezéseket. A kézikönyv hátralevő részében az expr alatt egy érvényes PHP kifejezést értünk.

Előző | Tartalom | Következő
Mágikus konstansok | Fel | Operátorok