MareX WeBlog

PHP výuka - tvorba vlastních funkcí

REKLAMA

V minulém článku série výuky PHP jsme si začali povídat o funkcích. Ukázali jsme si, jak se používají funkce v PHP již předvytvořené a taky jsme si řekli, že můžeme vytvářet i funkce vlastní. Co je vlastně funkce? Funkce je nějak pojmenovaný blok více příkazů. K čemu jsou funkce dobré? Máme-li například nějaký složitější kód (třeba nějaký hodně složitý výpočet), který potřebujeme používat na svých stránkách častěji, ať už v rámci jednoho nebo více scriptů, stačí nám funkci vytvořit pouze jednou a pak ji na určitém místě vyvolat jednoduchým zadáním jejího názvu.

Jak tedy takovou funkci vytvořit:

function nazev_funkce () {
  seznam příkazů;
}
  • Takže nejprve zadáme klíčové slovo function, tím řekneme interpretu, že se chystáme vytvořit novou funkci.
  • Za tímto slovíčkem následuje samotný název funkce. Pro názvy funkcí platí stejné pravidlo jako pro proměnné, s tím rozdílem, že nezačínají znakem $ (dolaru) a také se při jejich volání nerozlišuje velikost písmen.
  • Za názvem funkce následují kulaté závorky. V těchto závorkách se některým funkcím předávají parametry, ovšem závorky je potřeba uvést i v případě, že žádné parametry funkci nepředáváme. Podle nich interpreter například pozná, že voláme funkci a nikoliv konstantu.
  • A nakonec uvedeme složené závorky, uvnitř nichž bude schován samotný běh funkce (seznam příkazů).

Naprosto jednoduchá funkce by mohla vypadat třeba takhle:

<?php
function pozdrav () {
  echo 'Ahoj lidičky!';
}
?>

Tahle funkce nedělá nic jiného, než že vypíše text ‘Ahoj lidičky’. Toť vše, nic jiného neumí. Kdekoliv budete chtít na vašich stránkách vypsat tento text, stačí tuto funkci vyvolat takto: pozdrav();. Ovšem nemůžete výsledek této funkce uložit třeba do proměnné. Proč? Jednoduše proto, že žádný výsledek nevrací, nemá žádnou návratovou hodnotu. Takže si tuhle naši jednoduchou funkci napíšeme trochu jinak:

<?php
function pozdrav () {
  return 'Ahoj lidičky!';
}
?>

Všimli jste si nějake změny? Určitě ano, příkaz echo jsme zaměnili za příkaz return. Onen příkaz returnnám způsobí právě to, že naše funkce bude vracet nějakou hodnotu a to tu, která je uvedená hned za ním. V tomto případě je to právě onen text ‘Ahoj lidičky’. Pokud teď přímo do našeho scriptu vyvoláme naši funkci, nic se nestane, protože už nevypisuje přímo text na obrazovku, ale pouze jej vrací. Abychom mohli text použít, musíme výstup funkce přiřadit nějaké proměnné:

<?php
$pozdrav = pozdrav();
?>

nebo jej přímo vypsat třeba příkazem echo:

<?php
echo pozdrav();
?>

Funkce s parametry

Jak jsme si na začátku řekli, závorky za názvem funkce slouží pro předávání parametrů. Teď si ukážeme, jak se tyto parametry funkci předávají a používají. Pokud chceme, aby nám funkce zpracovávala nějaké parametry, musíme to definovat již při jejím vytváření. To znamená, že do závorek musíme uvést proměnné, které budeme chtít ve funkci používat. Ukážeme si to na jednoduchém příkladu funkce, které budeme předávat jedno číslo, které vynásobíme třeba 5:

<?php
// deklarace funkce
function nasobeni ($cislo) {
  return $cislo * 5;
}
 
// použití funkce
echo nasobeni (12);
?>

Tenhle kód nám na obrazovku vypíše číslo 60.

Vytvořili jsme funkci, které předáváme jeden parametr (proměnná $cislo), v ní jsme tuto předanou hodnotu vynásobili číslem 5 a výsledek nastavili jako návratovou hodnotu funkce. potom jsme výsledek funkce s předanou hodnotou 12 nechali vypsat příkazem echo.

Platnost proměnných

Než budeme pokračovat, musíme si ještě něco říct o platnosti proměnných. Totiž proměnné definované uvnitř funkce jsou platné právě pouze v rámci této funkce a nikde jinde. To platí i obráceně. Proměnné deklarované vně funkce nejsou k dispozici uvnitř funkce. Lépe to asi pochopíte na malém příkladu (v komentářích je vždy napsáno, co bude vráceno):

<?php
function test ($a) {
  $b = $a;
  return $b;
}
 
// vypíše 20
echo test (20);
 
$a = 10;
$b = 5;
test (20);
// vypíše 10
echo $a;
// vypíše 5
echo $b;
?>

Na řádku 14 bude vypsáno číslo 10, protože i když jsme po deklaraci proměnné $a použili funkci test s parametrem 20, tak nám globální proměnná $a definovaná mimo funkci nemůže ovlivnit hodnotu proměnné $a definované uvnitř funkce. Totéž platí pro proměnnou $b vypisovanou na řádku 16. Toto je vlastně ochrana, abyste si náhodou nějakou funkcí neovlivnili hodnotu jiné proměnné, kterou můžete potřebovat pro jiné účely. Může se totiž stát, že zapomenete, že proměnnou se stejným názvem už jste někde jednou vytvořili.

Ovšem, pokud budete chtít takovouhle proměnnou ovlivnit, tak to samozřejmě jde. Jen musíte interpretu PHP dát vědět, že jste si vědomi toho, že ve funkci měníte hodnotu globální proměnné. Na toto stačí použít klíčové slovo global:

<?php
function test ($a) {
  global $b;
  $b = $a;
  return $b;
}
 
$b = 10;
/**
 * spuštěním funkce TEST nyní ovlivníme hodnotu globální
 *  proměnné $b, protože jsme to tak ve funkci nastavili
 */
test (20);
 
// vypíše 20
echo $b;
?>

Úplně stejně to bude fungovat, pokud použijete asociativní pole GLOBALS:

<?php
function test ($a) {
  $GLOBALS['b'] = $a;
  return $b;
}
 
$b = 10;
/**
 * spuštěním funkce TEST nyní ovlivníme hodnotu globální
 *  proměnné $b, protože jsme to tak ve funkci nastavili
 */
test (20);
 
// vypíše 20
echo $b;
?>

Předávání více parametrů

Takže už víme, jak je to s platností proměnných a že funkci můžeme předávat parametry. Ale funkci můžeme předávat více než jeden parametr, jak jsme si to ukazovali na funkci nasobeni. Teď si tedy vytvoříme stejnou funkci, s tím rozdílem, že v ní nebude napevno nastaveno násobení číslem 5, ale předáme jí parametry dva (dvě čísla), která budeme násobit mezi sebou.

<?php
function nasobeni ($cislo1, $cislo2) {
  return $cislo1 * $cislo2;
}
 
// vypíše 35
echo nasobeni (5, 7);
?>

Jak vidíte, jednotlivé parametry se oddělují čárkou, jak při vytváření funkce, tak při jejím použití. Takto můžete použít téměř libovolný počet parametrů. Co se ale stane, když této funkci při jejím volání předáme místo dvou jen jeden nebo žádný parametr? Volání funkce skončí chybou. PHP nám vypíše informaci o nesprávném počtu parametrů. Jenže my víme, že v PHP existují některé již předpřipravené funkce, které mají některé parametry nepovinné. Takovou funkci si my můžeme vytvořit taky, stačí, když parametru, který má být nepovinný nastavíme nějakou standardní hodnotu již při vytváření funkce. Opět si to ukážeme na naší funkci nasobeni, ovšem tentokrát nastavíme druhému parametru standardní hodnotu:

<?php
function nasobeni ($cislo1, $cislo2 = 5) {
  return $cislo1 * $cislo2;
}
 
// vypíše 35, předali jsme oba parametry
echo nasobeni (5, 7);
 
// vypíše 25, předali jsme jen jeden parametr
echo nasobeni (5);
?>

Ve funkci jsme druhému parametru nastavili standardní hodnotu 5. V prvním použití funkce (řádek 7) jsme předali parametry oba, takže standardní hodnota se nepoužila, ve druhém volání funkce (řádek 10) jsme druhý parametr nezadali, takže se místo něj dosadila námi zadaná standardní hodnota 5.

Používání nepovinných parametrů má nějaká svá pravidla. Hlavním a nejdůležitějším je, aby nepovinné parametry byly vždy na konci seznamu parametrů. Protože, jak víme, při volání funkce se hodnoty vynechávají zprava, jinak by totiž PHP parser neměl šanci poznat, jaký parametr chceme vynechat. Dále také, pokud ve funkci použijete více nepovinných parametrů, ty parametry, u kterých se předpokládá, že budou vynechávány nejčastěji, dávejte co nejvíc nakonec.

Tohle by bylo pro dnešek o funkcích vše. Příště si ještě musíme povědět o předávání parametrů odkazem a o funkcích s proměnným počtem parametrů.

REKLAMA

PHP výuka - tvorba vlastních funkcí