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.