V p°φpad∞, ₧e budeme chtφt n∞kde ve skriptech vyvolßvat stßle stejnou sekvenci p°φkaz∙, m∙₧eme vyu₧φt funkce. Funkci si nadefinujeme a potom ji zavolßme v mφst∞, kde pot°ebujeme. V praxi si to m∙₧eme p°edstavit nap°φklad tak, ₧e budeme budovat Internetov² obchod. Ve skriptech budeme Φasto vypisovat cenu zbo₧φ bez DPH a s DPH. Bylo by zbyteΦnΘ stßle vypisovat slo₧it² k≤d pro v²poΦet DPH. Mφsto toho bude lepÜφ si nadefinovat funkci, kterΘ jenom p°edßme jako parametr cenu a funkce nßm vrßtφ cenu s DPH nebo bez DPH. Co jsou to parametry si vysv∞tlφme v nßsledujφcφm textu.
function (< parametr 1 >,< parametr 2 >,< parametr 3 >, ...) { < p°φkazy k provedenφ >; return < hodnota >; }
Nynφ si na p°φklad∞ ukß₧eme jednoduchou funkci (bez parametr∙), kterß po svΘm zavolßnφ vypφÜe slova "Hello world".
<? // Funkce, kterß po svΘm zavolßnφ vypφÜe "Hello world". function Vypis() { echo "Hello world"; } ?>
Funkci potom zavolßme pomocφ: "Vypis();". JeÜt∞ bych m∞l upozornit, ₧e funkce nejsou citlivΘ na velikost jejich nßzv∙ oproti prom∞nn²m. Pokud tedy zavolßme funkci s: "Vypis();" nebo "vypis();", v₧dy se zavolß stejnß funkce.
V nßsledujφcφm p°φklad∞ si ukß₧eme funkci, kterΘ p°edßme dva parametry (Φφsla) a funkce bude vracet hodnotu t∞chto dvou Φφsel po d∞lenφ.
<? function Vypis($a, $b) { // Nulou d∞lit nelze. if ($a == 0 || $b == 0) { return 0; } else { return $a/$b; } } /* Nynφ si vypφÜeme p°φkazem "echo" hodnotu, kterou nßm vrßtφ funkce po dosazenφ do prom∞nn²ch $a = 2 a $b = 1. */ echo Vypis(2,1); ?>
DalÜφ zvlßÜtnostφ funkcφ je to, ₧e standartn∞ ve funkcφch nem∙₧eme vypsat hodnotu prom∞nn²ch, kterΘ jste si vytvo°ili mimo definici funkce. VÜe si ukß₧eme na p°φklad∞.
<? // prom∞nnΘ $a p°i°adφme hodnotu 5 $a = 5; /* Vytvo°φme funkci a uvnit° nadefinujeme prom∞nnou $a, kterß bude mφt hodnotu 1; */ function Vypis() { echo "\"$a\""; } echo "\"$a\" <br>"; Vypis(); ?>
Jako v²sledek uvidφme, ₧e se nejprve vypφÜe hodnota 5 v uvozovkßch a potom prßzdnΘ uvozovky. To proto, ₧e funkce Vypis() "nevidφ" hodnotu prom∞nnΘ $a, kterß je nadefinovßna mimo funkci.
Abychom mohli vypsat hodnotu tΘto lokßlnφ prom∞nnΘ, musφme uvΘst uvnit° funkce p°φkaz global a jejφ nßzev nebo m∙₧eme pou₧φt asociativnφ pole "$GLOBALS[< nßzev prom∞nnΘ bez znaku $ >]". V praxi to vypadß nßsledovn∞:
<? // prom∞nnΘ $a p°i°adφme hodnotu 5 $a = 5; /* Vytvo°φme funkci a uvnit° nadefinujeme prom∞nnou $a, kterß bude mφt hodnotu 1; */ function Vypis() { global $a; echo "\"$a\""; } echo "\"$a\" <br>"; Vypis(); ?>
Nebo p°i pou₧φtφ asociativnφho pole $GLOBALS:
<? // prom∞nnΘ $a p°i°adφme hodnotu 5 $a = 5; /* Vytvo°φme funkci a uvnit° nadefinujeme prom∞nnou $a, kterß bude mφt hodnotu 1. */ function Vypis() { echo "\"$GLOBALS[a]\""; } echo "\"$a\" <br>"; Vypis(); ?>
M∙₧e se stßt, ₧e budeme chtφt nabφdnout jako v²chozφ argument funkce urΦitou hodnotu a u₧ivatele nezat∞zovat zadßvßnφm tΘto hodnoty. V praxi to vypadß nßslednovn∞:
<? // Vytvo°φme funkci, kterß bude vypisovat zvolen² text. function Vypis($co = "Hello world") { echo $co; } /* Nynφ m∙₧eme zavolat tuto funkci bez argument∙ a ta nßm vypφÜe textov² °et∞zec "Hello world". */ Vypis(); /* Pokud parametr zadßme, zobrazφ se nßm jeho hodnota. */ Vypis("Testovacφ text"); ?>
JeÜt∞ vßs musφm upozornit, ₧e pokud budeme zadßvat s implicitnφma hodnotama i hodnoty normßlnφ m∙sφ b²t implicitnφ hodnoty uvedeny v₧dy jako poslednφ:
<? function Vypis($a,$b,$co = "Hello world") { echo $co; } ?>
Pro tento dφl to bude vÜe. V p°φÜtφm dφle si povφme o objektech v PHP.