Kapitola 10. V�razy
V�razy jsou nejd�le�it�j��mi stavebn�mi kameny PHP. V PHP je t�m�� v�e,
co nap�ete, v�raz. Nejjednodu���, a p�ece nejp�esn�j�� definic� v�razu je
"v�echno, co m� hodnotu".
Nejz�kladn�j��mi formami v�raz� jsou konstanty a prom�nn�. Kdy� nap�ete
"$a = 5", p�i�azujete '5' do $a. '5' m�, pochopiteln�, hodnotu 5, nebo
jin�mi slovy, '5' je v�raz s hodnotou 5 (v tomto p��pad� je '5'
celo��selnou konstantou).
Po tomto p�i�azen� budete o�ek�vat, �e hodnota $a bude 5, tak�e kdybyste
napsali $b = $a, o�ek�vali byste tot�, jako p�i naps�n� $b = 5. Jin�mi
slovy, $a je tedy v�raz s hodnotou 5. Pokud v�e pracuje spr�vn�,
p�esn� to se tak� stane.
O n�co slo�it�j��m p��kladem v�raz� jsou funkce. Uva�ujme nap�. tuto
funkci:
Za p�edpokladu, �e jste dob�e sezn�meni s konceptem funkc� (pokud ne,
nahl�dn�te do kapitoly o funkc�ch), byste p�edpokl�dali, �e naps�n�
$c = foo() je v z�sad� tot� jako
$c = 5, a m�te pravdu. Funkce jsou v�razy s hodnotou
jejich n�vratov� hodnoty. Funkce foo() vrac� 5, tud� hodnota v�razu
'foo()' je 5. Obvykle funkce nevracej� konstantn� hodnotu, n�br� n�co
vypo��t�vaj�.
Hodnoty v PHP samoz�ejm� nemusej� b�t pouze cel� ��sla, a velmi �asto
tak� nejsou. PHP podporuje t�i typy skal�rn�ch hodnot: celo��seln�,
re�ln� (pohybliv� ��dov� ��rka) a �et�zce (skal�rn� hodnoty jsou hodnoty,
kter� nejde "rozb�t" na men�� ��sti, narozd�l nap�. od pol�). PHP
podporuje tak� dva kompozitn� (neskal�rn�) typy: pole a objekty. Ka�d�
z t�chto typ� hodnot m��e b�t p�i�azen do prom�nn� nebo vracen z funkce.
U�ivatel� PHP/FI 2 by nem�li poc�tit zm�nu. Ale PHP jde ve v�razech
mnohem d�le, stejn� jako mnoho jin�ch programovac�ch jazyk�. PHP je
v�razov� orientovan� jazyk, ve smyslu, �e t�m�� v�e je v�raz. Uva�ujme
p��klad, kter�m jsme se ji� zab�vali, '$a = 5'. Ihned vid�me, �e jsou
zde zahrnuty dv� hodnoty, celo��seln� konstanta '5' a hodnota $a,
kter� je aktualizov�na na 5. Ale je pravda, �e je tu je�t� jedna hodnota,
je to hodnota samotn�ho p�i�azen�. P�i�azen� jako takov� ohodnocuje
p�i�azovanou hodnotu, v tomto p��pad� 5. V praxi to znamen�, �e '$a = 5',
bez ohledu na to co d�l�, je v�raz s hodnotou 5. Proto je '$b = ($a = 5)'
tot� jako '$a = 5; $b = 5;' (st�edn�k ozna�uje konec v�razu). Proto�e
p�i�ezen� jsou parsov�na zprava doleva, m��ete tak� napsat
'$b = $a = 5'.
Jin�m dobr�m p��kladem orientace na v�razy je pre- a post-inkrementace
a dekrementace. U�ivatel� PHP/FI 2 a mnoha jin�ch jazyk� znaj� notaci
prom�nn�++ a prom�nn�--. To jsou inkrementa�n� a dekrementa�n� oper�tory.
V PHP/FI 2 nem�lo '$a++' ��dnou hodnotu (nen� to v�raz), a proto ne�lo
p�i�adit nebo jinak pou��t. PHP roz�i�uje schopnosti p�em�nou t�chto
konstrukc� ve v�razy, jako v C. V PHP, stejn� jako v C, existuj� dva typy
inkrementace - pre-inkrementace a post-inkrementace. Oba ve sv� podstat�
inkrementuj� prom�nnou a efekt na tuto prom�nnou je toto�n�. Rozd�l je
v hodnot� inkrementa�n�ho v�razu. Pre-inkrementace, zapsan� jako
'++$var', ohodnocuje v�raz inkrementovanou hodnotou (PHP inkrementuje
prom�nnou d��ve, ne� p�e�te jej� hodnotu, proto "pre-inkrementace").
Post-inkrementace, zapsan� jako '$var++', ohodnocuje v�raz p�vodn�
hodnotou prom�nn� $var, p�ed inkrementac� (PHP inkrementuje prom�nnou
po p�e�ten� jej� hodnoty, proto "post-inkrement").
Velmi �ast�m typem v�raz� jsou v�razy porovn�vac�. Tyto v�razy se
ohodnocuj� 0 a 1 ve v�znamu FALSE, resp. TRUE. PHP podporuje
> (v�t�� ne�), >= (v�t�� nebo rovno), == (rovn� se), != (nerovn� se),
< (men�� ne�) a <= (men�� nebo rovno). Tyto v�razy se nej�ast�ji
pou��vaj� v podm�nk�ch, jako je konstrukt if.
Posledn�m p��kladem v�raz�, kter�m se budeme zab�vat, je kombinac�
p�i�azen� a oper�tor�. Ji� v�te, �e kdy� chcete inkrementovat $a o
jedni�ku, jednodu�e nap�ete '$a++' nebo '++$a'. Ale co kdy� chcete
hodnotu zv��it o jin� ��slo, nap�. o 3? Mohli byste napsat '$a++'
v�ckr�t za sebou, ale to samoz�ejm� nen� efektivn� ani pohodln�.
Mnohem prakti�t�j�� je napsat '$a = $a + 3'. V�raz '$a + 3' ohodnocuje
hodnotu $a plus 3 a je p�i�azen zp�t do $a, co� d�v� $a inkrementovan�
o 3. V PHP, stejn� jako v �ad� jin�ch jazyk� (jako je C), to m��ete
napsat krat��m zp�sobem, kter� se �asem stane jasn�j�� i rychlej��
k pochopen�. P�i�ten� 3 k aktu�ln� hodnot� $a lze zapsat jako '$a += 3'.
P�esn� to znamen� "vezmi hodnotu $a, p�i�ti k n� 3 a p�i�a� zp�t do $a".
Krom� krat��ho a p�ehledn�j��ho z�pisu je v�hodou tak� rychlej�� proveden�.
Hodnota '$a += 3', jako hodnota regul�rn�ho p�i�azen�, je p�i�azovan�
hodnota. Uv�domte si, �e to NEN� 3, n�br� $a plus 3 (co� je hodnota
v�razu p�i�azovan�ho do $a). Takto lze pou��t jak�koli bin�rn� oper�tor,
nap��klad '$a -= 5' (ode�ti 5 od hodnoty $a), '$b *= 7' (vyn�sob hodnotu
$b ��slem 7) apod.
Je tu je�t� jeden v�raz, kter� se m��e zd�t zvl�tn�, pokud jste ho
je�t� nevid�li v jin�ch jazyc�ch: tern�rn� podm�n�n� oper�tor:
Pokud hodnota prvn�ho podv�razu je
TRUE (nenulov�), je ohodnocen druh�
podv�raz a je v�sledkem cel�ho podm�n�n�ho v�razu. Jinak je ohodnocen
t�et� podv�raz a je pak hodotou cel�ho v�razu.
N�sleduj�c� p��klad by m�l pomoci l�pe pochopit pre- a post-inkrementaci
i v�razy obecn�:
Na za��tku kapitoly bylo �e�eno, �e si pop�eme r�zn� typy konstrukt�,
a jak bylo sl�beno, v�razy mohou b�t konstrukty. V tomto p��pad� maj�
konstrukty form�t 'expr' ';', co� znamen� "v�raz n�sledovan� st�edn�kem.
V konstruktu '$b=$a=5;', je $a=5 platn� v�raz, ale samo o sob� to nen�
konstrukt.'$b=$a=5;' je i platn� konstrukt.
Pozn. p�ekladatele: P�edchoz�m odstavci (ob�as i jinde) pou��v�m term�n
"konstrukt" pro anglick� slovo "statement". Tento p�eklad nen� p��li�
korektn�, ale v �esk� program�torsk� mluv� neexistuje vhodn� term�n.
Kdyby n�kdo v�d�l o lep��m, napi�te mi, pros�m, na [email protected].
Posledn� v�c�, kter� si zaslou�� zm�nku, je pravdivostn� hodnota v�raz�.
V mnoha p��padech, hlavn� podm�nk�ch a cyklech, v�s nezaj�m� konkr�tn�
hodnota v�razu, n�br� pouze to, jestli je TRUE nebo FALSE.
Konstanty TRUE a FALSE (mal�/velk� p�smena nehraj� roli) p�edstavuj�
dv� mo�n� boolovsk� (pravdivostn�) hodnoty. V p��pad� pot�eby je v�raz
automaticky p�eveden na typ boolean. Detailn�j�� informace o zp�sobu
konverze - viz
sekce o typov� konverzi.
PHP poskytuje plnou a silnou implementaci v�raz� a �pln� je zdokumentovat
p�esahuje rozsah tohoto manu�lu. V��e uveden� p��klady by v�m m�li
nazna�it, co jsou v�bec v�razy a jak konstruovat u�ite�n� v�razy. Ve
zb�vaj�c� ��sti manu�lu budeme ps�t expr
jako�to jak�koli platn� PHP v�raz.