Anglická verze
logolink

< Zpět na seznam lekcí

PHP a funkce

PHPObsah lekce:

  • Co je to funkce?
  • Jak definovat funkci v PHP
  • Vstupní parametry funkce
  • Návratová hodnota funkce

PHP a funkce

Základním prostředkem pro strukturování programu je použití funkcí. Často se dostáváme do situace, že chceme v našem programu opakovaně provést nějakou sekvenci příkazů (například připojení k databázi z minulé lekce, výpis záznamů z databáze nebo zobrazení záhlaví stránky).

Pokud tyto příkazy používáme opakovaně na různých místech našich stránek, bylo by nevhodné jejich konstrunci uvádět opakovaně na těchto místech. Když bychom totiž provedli nějakou změnu, museli bychom změnit všechny výskyty těchto příkazů.

Z tohoto důvodu budeme používat funkce. Daný kód si umístíme do funkce a dále už budeme volat pouze funkci, kterou jsme vytvořili.

V minulých lekcích jsme u funkce používali (například funkce MySQL_Connect nebo fopen, které byly použity v minulých lekcích). V tomto případě se jedná o standardní funkce, které jsou součástí jazyka PHP. My si však v této lekci ukážeme, jak vytvářet funkce vlastní.

Definice funkce

Před samotným popisem definice funce si nejprve uveďme obecný zápis:

Obecný zápis funkce
function jmeno(parametr1, parametr2, ...)
{
	příkazy;
	return hodnota;
}

Jak je vidět z výše uvedeného zápisu, každá funkce bude začínat klíčovým slovem function. Za tímto klíčovým slovem následuje jméno funkce, pomocí kterého budeme funkci volat v našem PHP skriptu. PO názvu funkce následují kulaté závorky, ve kterých jsou uvedeny vstupní parametry funkce, které oddělujeme čárkou.

Na dalších řádcích funkce budou následovat složené závorky, ve kterých již budou jednotlivé příkazy, které má funkce provádět. Jeden z těchto příkazů je příkaz return (který je uveden na předposledním řádku našeho zápisu). Tento příkaz slouží pro předání návratové hodnoty (neboli výsledku) funkce. U jednodušších funkcí, kde nechceme zpracovávat žádnou výslednou hodnotu, tento řádek není třeba uvádět. Stejně tak není nutné uvádět vstupní parametry - místo nich je možné ponechat prázdné závorky.

Ukázka jednoduché funkce bez vstupních parametrů a bez návratové hodnoty
function pozdrav()
{
	echo "Vítejte na našich WWW stránkách!";
}

Následně již stačí naší funkci zavolat. Funkci můžeme volat klidně i opakovaně, musí však platit, že je definována před tím, než ji budeme volat (nejlépe na začátku skriptu).

Volání funkce pozdrav
pozdrav();

Vstupní parametry

V této části se zaměříme na vstupní parametry funkce, které předáváme v závorce. Pomocí parametrů předáváme vstupní hodnoty, které chceme uvnitř funkce zpracovávat. Takovýto parametr se uvnitř funkce chová jako běžná proměnná.

Proč ale musíme vytvářet parametry a nemůžeme uvnitř funkce použít přímo proměnné, které jsme používali před voláním funkce? Proměnné totiž nemají globální platnost a například proměnná $hodnota, kterou budeme mít někde v PHP skriptu bude jiná proměnná než proměnná $hodnota, kterou použijeme uvnitř funkce. Veškeré data, které budeme zpracovávat uvnitř funkce, proto musíme předat pomocí vstupních parametrů.

Nyní se vrátíme k naší funkci pozdrav z předchozího příkladu. 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.

Ukázka jednoduché funkce bez návratové hodnoty
function pozdrav($hodina)
{
	if ($hodina < 12)
	{
		echo "Dobré dopoledne!";
	}
	else
	{
		echo "Dobré odpoledne!";
	}
}

Podle úpravy definice funkce musíme upravit i její volání. To bude vypadat následovně:

Volání funkce pozdrav
$cas = 13;
pozdrav($cas);

Návratová hodnota

Jedinou částí funkce, která byla zmíněna v úvodu, ale zatím jsme ji nevyužili, je návratová hodnota funkce. Návratovou hodnotu předáváme pomocí příkazu return, za kterým následuje hodnota nebo jméno proměnné, která požadovanou hodnotu obsahuje.

Návratovou hodnotou předáváme výsledek činnosti funkce, aby mohl být zpracován nadřazeným skriptem, nebo funkcí, ze které byla naše funkce volána. Toho docílíme tak, že například naši funkci přiřadíme do určité proměnné. To jsme provedli například v minulé lekci, kdy jsme si stav připojení k databázi uložili do proměnné $spojeni pomocí příkazu $spojeni = MySQL_Connect("localhost","root","");.

Použití návratové hodnoty si ukážeme na jednoduchém příkladu funkce, která bude sloužit pro výpočet objemu kvádru.

Výpočet objemu kvádru
function objem($a, $b, $c)
{
	$objem = $a*$b*$c;
	return $objem;
}

Funkce objem má 3 vstupní parametry. Tyto parametry vystupují uvnitř funkce jako proměnné $a, $b a $c. Po spuštění funkce je vytvořena lokální proměnná $objem, do které je uložen součin všech tří vstupních hodnot. Následně je tato hodnota předána jako výsledek funkce pomocí klíčového slova return.

Použití příkazu return je nezbytné, protože mimo naši funkci nemůžeme k proměnné $objem přistupovat (jak už bylo zmíněno, jedná se o lokální proměnnou). Tato proměnná zaniká po opuštění funkce.

Použití funkce pro výpočet objemu kvádru
 $vyska = 10;
$sirka = 20;
$hloubka = 5;

echo "Objem kvadru je ".objem($vyska, $sirka, $hloubka);   

Závěrem si ukážeme ještě jeden příklad, ve kterém se vrátíme k minulé lekci, kde byl popsán postup pro připojení k databázi. Protože se připojovat k databázi budeme docela často, je vhodné tento kód realizovat pomocí funkce, kterou budeme využívat téměř na každé stránce našeho webu.

Pokud ukázku z minulé lekce upravíme do podoby funkce, bude výsledek následující:

Funkce pro připojení k databázi
function dbconn() {
	$spojeni = MySQL_Connect("localhost","root","");
	if (!$spojeni) {
		die('Could not connect: ' . mysql_error());
	}
	else
	{
		echo 'Connected successfully';
		mysql_query("SET CHARACTER SET utf8");
		mysql_select_db("renome");
		return $spojeni;
	}
}

Použití funkce ve více PHP skriptech

Poslední problém, který je třeba vyřešit, je použití stejné funkce ve více různých PHP souborech. Uvádět definici funkce na začátku každého souboru není vhodné, protože, pokud bychom ve funkci prováděli změny, museli bychom funkci změnit ve všech souborech, které používáme.

Řešením tohoto problému je přesun funkcí do zvláštního souboru, který si pojmenujeme například jako utils.php, a na tento soubor se budeme odkazovat ve všech PHP skriptech, ve kterých chceme funkci použít. Pro tento účel slouží funkce require, která má jeden vstupní parametr, a tím je cesta ke vkládanému souboru.

Soubor utils.php
<?php
function dbconn() {
	$spojeni = MySQL_Connect("localhost","root","");
	if (!$spojeni) {
		die('Could not connect: ' . mysql_error());
	}
	else
	{
		echo 'Connected successfully';
		mysql_query("SET CHARACTER SET utf8");
		mysql_select_db("renome");
		return $spojeni;
	}
}
?>
Soubor index.php
<?php
require("utils.php");

...

$spojeni = dbconn();

...

?>

Domácí úkol

  1. Vytvořte funkci, která bude mít na vstupu poloměr kruhu a po jejím spuštění se vypíše obvod a obsah kruhu.
  2. Vytvořte funkci, jejiž návratovou hodnotou bude součet čísel od A do B. Hodnoty A a B budou vstupními parametry funkce.

Další čtení

Odkazy

Otázky

  1. Jakým způsobem vytváříme v PHP vlastní funkce?
  2. K čemu slouží příkaz return?
webdesign, xhtml, css, php - Mgr. Michal Mikláš