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