12. Funkce v PHP

Funkce v PHP dělíme na dvě základní skupiny – vestavěné a uživatelské.

Vestavěné funkce

Samotné PHP obsahuje doslova tisíce funkcí, které můžete libovolně používat ve svých skriptech. Těmto tedy říkáme vestavěné funkce. Jedním ze základních příkladů je funkce phpinfo:

<?php
phpinfo();
?>

Tato vestavěná funkce nám například vypíše kompletní informace o PHP serveru.

Funkci můžeme přidat také určité parametry. Ty jsou umístěny v závorkách za názvem funkce. Příklad:

<?php
print('ahoj');
// V tomto případě pouze vypíše ahoj.
?>

Dále může funkce tzv. něco vracet (například vypisovat).

<?php
$cislo = pi();
// Proměnná $cislo bude obsahovat číslo pí

echo $cislo;
// Výpis čísla pí

echo '<br />';
// Zařídí, aby se další vypsalo na nový řádek

echo pi();
// Číslo pí je možné také vypsat přímo
?>

Nebo příklad z funkcí max:

<?php
$cislo = max(4,1);
// Proměnná $cislo bude obsahovat největší číslo z čísel 4 a 1.
echo $cislo;
// Výpis hodnoty proměnné $cislo
echo '<br>';
// Zařídí, aby se další číslo vypsalo na nový řádek. I tuto funkci můžeme vypsat takto:
echo max(4,1);
// Vypíše největší číslo z čísel 4 a 1
?>

Příklad využití vestavěné funkce náhodného čísla - mt_rand (elektronická verze házecí kostky)

Funkce mt_rand vrací náhodné číslo. Má 2 parametry, a to minimální a maximální číslo z rozsahu, který má vrátit. V tomto případě 1 až 6.

<?php
 $nahodne_cislo = mt_rand(1,6);
  switch ($nahodne_cislo) {
  case '1':
   echo 'Padlo číslo 1';
   break;
  case '2':
   echo 'Padlo číslo 2';
   break;
  case '3':
   echo 'Padlo číslo 3';
   break;
  case '4':
   echo 'Padlo číslo 4';
   break;
  case '5':
   echo 'Padlo číslo 5';
   break;
  case '6':
   echo 'Padlo číslo 6';
   break;
 }
?>

Seznam všech vestavěných funkcí PHP lze najít v oficiálním manuálu PHP - http://php.net nebo např zde - http://php.baraja.cz/

Uživatelské funkce

Pro vytváření uživatelských neboli vlastních funkcí se používá klíčové slovo funkcion. Za klíčovým slovem funkcion následuje název (jméno) funkce, které si sami zvolíme. Zjednodušeně to vypadá následovně:

<?php
function jmeno_funkce()
{
telo_funkce;
}
?>

Nyní si zkusíme konkrétní jednoduchý příklad, kde se pouze vypíše pozdrav Ahoj:

<?php
function vypis()
// Zde jsme vytvořili funkci s názvem vypis. Dále následuje její tělo. V tomto případě je to pouze příkaz k vypsání slova Ahoj
{
echo 'Ahoj';
}
vypis();
// Zde voláme funkci s názvem vypis. V tomto případě provede vypsání slova Ahoj.
?>

Uživatelské funkce s parametry

Další příklad ukazuje složitější funkci s parametry:

<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>

Nejprve je vytvořena funkce s názvem TretiMocnina. Ta obsahuje parametr, který v tomto případě tvoří novou proměnnou s názvem $Cislo. V tělu funkce následuje operace, kdy vytvoříme novou proměnnou s názvem $Vysledek. Tomu je přiřazena operace, která násobí třikrát za sebou proměnnou $Cislo (protože chceme tvořit třetí mocninu, což je trojnásobek). Na dalším řádku máme slůvko returt což je příkaz, který nám vrací hodnotu proměnné $Vysledek. Následuje příkaz echo, který vypíše hodnotu proměnné TretiMocnina s parametrem 5. Neboli do proměnné $Cislo dosadíme tímto číslo 5, které se následně třikrát po sobě vynásobí a vytvoří tedy třetí mocninu.

Další příklad ukazuje, že funkci můžeme ve skriptu použít, kolikrát chceme. Což se velmi často používá:

<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>

Další ukázka uživatelské funkce (zdroj http://php.vrana.cz):

<?php
// Vrácení českého názvu měsíce

function cesky_mesic($mesic) {
    static $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
    return $nazvy[$mesic];
}
echo cesky_mesic(date("n")) . "\n";

// Vrácení českého názvu dne v týdnu
function cesky_den($den) {
    static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
    return $nazvy[$den];
}
echo cesky_den(date("w")) . "\n";
?>

Pozn.: znaky \n se v PHP používají pro odřádkování v kódu. Nikoliv ve webové stránce! Pro tu se musí použít klasické <br>

Globální a lokální proměnné

Jakákoliv proměnná, která je použita mimo jakoukoliv funkci, se v PHP nazývá globální proměnná. Zato ta, která je použita uvnitř funkce se nazývá lokální proměnná. Tyto proměnné se navzájem nijak nemíchají a jsou jakoby oddělené. Příklad:

<?php
$x = 4;
// Globální proměnná $x nastavena na 4.
function vypis_x()
{
echo $x;
// Tohle je pokus o výpis lokální proměnné $x.
}
echo vypis_x();
?>

Po spuštění dostanete asi toto chybové hlášení:

Notice: Undefined variable: x in C:\wamp\www\index.php on line 7

Jde o to, že uvnitř funkce s názvem vypis_x se pokoušíme příkazem echo vypsat proměnnou $x. Takováto proměnná ale uvnitř této funkce neexistuje. Nachází se totiž mimo tuto funkci, tak že ji tento příkaz echo uvnitř funkce marně zkouší vypsat. Proměnná $x sice ve skriptu existuje, ale je je to globální proměnná, na kterou „zevnitř“ funkce nevidíme.

Poznámky k funkcím

  • Funkce muže mít více vstupních parametrů. Ty se pak oddělují čárkou.
  • Funkce v PHP mohou předávat parametry odkazem. To se provede tak, že před název proměnné v hlavičce funkce se uvede ampersand (&)
  • V těle funkce mohou být definovány proměnné s klíčovým slovem static. Hodnotu takových proměnných si PHP mezi jednotlivými voláními funkce pamatuje.
  • Funkce v PHP mohou být rekurzivní. To znamená, že funkce muže volat sebe samu.
  • Funkce nemůže vracet více než jeden výstupní parametr. Ale muže vracet pole, takže se to dá obejít.
  • Jedna uživatelská funkce muže volat jinou. Na pořadí, v jakém jsou uvedeny ve skriptu, přitom nezáleží. Volání funkce muže být uvedeno dokonce již dříve než definice funkce samotné.