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
luk@php.net
.
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
.