Funkce
Je blok kódu, který lze jednou nadefinovat a pak jej vyvolávat z ostatních částí programu
- Definice vlastních funkcí nám při programování šetří čas, vede k větší přehlednosti a strukturovanosti kódu.
- Funkce bychom měli definovat na začátku skriptu, vždy předtím, než je poprvé použijeme.
- Všechny proměnné použité ve funkci jsou pouze lokální - funkce je černá skříňka, která s hlavním skriptem komunikuje pouze pomocí vstupů a výstupu.
- Pokud chceme použít ve funkci globální proměnné, musíme je buď předat odkazem, nebo zpřístupnit příkazem global.
- Funkce může volat i jiné funkce, pokud volá sama sebe, jde o rekurzi.
Definice funkce má následující tvar:
function jmeno(parametr1, parametr2, ...) { příkazy; return hodnota; }
U názvu funkce je třeba si dát pozor, aby se její název nekryl s názvem již zavedené funkce PHP (nemůžete použít např. echo, return...) Pomocí parametrů funkci předáváme hodnoty, které má zpracovat. Příkazem return funkce vrací svůj výsledek. U jednoduchých funkcí můžeme parametry zcela vynechat, stejně tak jako vracení hodnoty.
Příklady:
Funkce bez vstupních parametrů a bez návratové hodnoty
function pozdrav() { echo("ahoj"); } //Následně již stačí naší funkci zavolat. Pozdrav();
Funkce bez návratové hodnoty
Funkci si upravíme tak, že do 12 hodin se vypíše text "Dobré dopoledne" a od 12 hodin "Dobré odpoledne". Pro zjednodušení bude funkce pracovat tak, že jako parametr jí předáme pouze číslo, které bude udávat počet hodin.
function pozdrav($hodina) { if ($hodina < 12) { echo "Dobré dopoledne!"; } else { echo "Dobré odpoledne!"; } } //Volání funkce pozdrav $cas = 13; pozdrav($cas);
Funkce s návratovou hodnotou
function vrat_mocninu($cislo) { return $cislo*$cislo; } echo(vrat(5));
Funkce vrácení českého názvu měsíce, vstupní parametr 1-12
function cesky_mesic($mesic) { $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosi nec'); return $nazvy[$mesic]; } date_default_timezone_set("Europe/Berlin"); echo cesky_mesic(date("n"));
Globální proměnné
Pracujeme-li uvnitř funkce s proměnnými, které jsou definované mimo tělo funkce, je třeba k nim přistupovat trochu odlišně:
$name = "Simon"; function jm(){ echo $GLOBALS['name']; } jm();
Pomocí $GLOBALS přistupujeme k proměnné deklarované vně funkce.
Rekurzivní funkce (funkce volá sama sebe)
function faktorial ($n) { if ($n == 0) return 1; else return $n * Faktorial ($n - 1); }
function mocnina($cislo, $exp) { if ($exp) { return $cislo * mocnina($cislo, $exp - 1); } return 1; } echo (mocnina(5, 3));