Kurz PHP (5.)

Funkce

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.


Zápis funkce

	
	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);

?>

Platnost proměnných

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();

?>

Implicitní hodnoty argumentů

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.

Petr Rympler