Fejezet 10. 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:
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 h�rom f�le
skal�rt�pust t�mogat: eg�sz, lebeg�pontos �s sztring
�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.
Eddig a PHP/FI 2 haszn�l�i nem tal�lkoztak semmi k�l�n�ssel.
Mindamellett 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/FI 2 haszn�l�inak �s sok m�s
nyelvet haszn�l�nak ismer�s lehet a v�ltoz�++ �s
v�ltoz�-- jel�l�s. Ezek az 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. Ezek a kifejez�sek 0-t vagy 1-et adnak,
annak megfelel�en, hogy hamisak (FALSE), vagy igazak
(TRUE) (ebben a sorrendben). A PHP t�mogatja a >
(nagyobb), >= (nagyobb, vagy egyenl�), == (egyenl�),
!= (nem egyenl�), < (kisebb) �s a <= (kisebb,
vagy egyenl�) oper�torokat. 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:
�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:
Ez megegyezik az al�bbi k�ddal:
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:
A fejezet elej�n azt �g�rt�k, hogy le�rjuk a k�l�nb�z�
utas�t�s-t�pusokat, �s �g�retnek megfelel�en a kifejez�sek
lehetnek �ll�t�sok. Nem minden kifejez�s �ll�t�s azonban, mert
utas�t�s, amely illeszkedik 'kif' ';' mint�ra, vagyis a
pontosvessz�vel folytatod� kifejez�s. 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.