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 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 ' , 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 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 :

 
$prvni

 
?

 
$druhy

 
:

 
$treti



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ě :

 
function

 
double(

 
$i

 
)

 
{

 
return

 
$i*2

 
;

 
}

 
$b

 
=

 
$a

 
=

 
5

 
;

 
/

 
*

 
přiřaď

 
hodnotu

 
pět

 
do

 
proměnných

 
$a

 
a

 
$b

 
*

 
/

 
$c

 
=

 
$a++

 
;

 
/

 
*

 
proveď

 
post-inkrement

 
,

 
přiřaď

 
původní

 
hodnotu

 
$a

 
(5

 
)

 
do

 
$c

 
*

 
/

 
$e

 
=

 
$d

 
=

 
++$b

 
;

 
/

 
*

 
proveď

 
pre-inkrement

 
,

 
přiřaď

 
inkrementovanou

 
hodnotu

 
$b

 
(6

 
)

 
do

 
$d

 
a

 
$e

 
*

 
/

 
/

 
*

 
nyní

 
jsou

 
hodnoty

 
proměnných

 
$d

 
a

 
$e

 
rovny

 
6

 
*

 
/

 
$f

 
=

 
double($d++)

 
;

 
/

 
*

 
přiřaď

 
dvakrát

 
hodnotu

 
$d

 
emphasis

 
před

 
/

 
emphasis

 
inkrementací

 
,

 
2*6

 
=

 
12

 
,

 
do

 
$f

 
*

 
/

 
$g

 
=

 
double(++$e)

 
;

 
/

 
*

 
přiřaď

 
dvakrát

 
hodnotu

 
$e

 
emphasis

 
po

 
/

 
emphasis

 
inkrementaci

 
,

 
2*7

 
=

 
14

 
do

 
$g

 
*

 
/

 
$h

 
=

 
$g

 
+=

 
10

 
;

 
/

 
*

 
nejdříve

 
je

 
$g

 
inkrementováno

 
o

 
10

 


 
pak

 
hodnotu

 
24

 
.




 
Hodnota

 
přiřazení

 
(

 
24

 
)

 
se

 
přiřadí

 
do

 
$h

 
a

 
$h

 
tím

 
získává

 
také

 
hodnotu

 
24

 
.

 
*

 
/





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 .