PHP pro pokročilé – funkce pro práci s funkcemi
Tímto článkem bych rád začal sérii, která by se měla zabývat pokročilejšími technikami v PHP. Postupně probereme funkce pro práci s třídami, objekty, ukážeme si použití COM a Windows API, a také si rozebereme některé méně známé knihovny. V tomto článku vám předvedu několik tipů pro práci s funkcemi.
Funkce v proměnných
Předně si ukážeme použití „funkce v proměnných“. Uvedeme si raději ihned příklad (efekt je stejný, jako když napíšeme Napis($string);
):
<?
function Napis($text) {
echo $text;
}
$string=“HELLO WORLD“; // nadefinujeme si pokusný řetězec
$nase_funkce=“Napis“; // vytvoříme si funkci v proměnné
$nase_funkce($string); // proměnná se zde chová jako funkce; vypíše se text v uvozovkách.
?>
K čemu nám ale takové konstrukce jsou? Představme si, že máme více podobných funkcí, příkladem jsou známé funkce pro zobrazení obrázku ImageJPEG(), ImagePNG nebo ImageGIF(). S tím úzce souvisí i poslání hlavičky Header, která prohlížeči sdělí typ přenášených dat. Nyní chceme co nejjednodušším způsobem skriptu říci, který typ souboru chceme vytvořit. Není nic jednoduššího než využít naší konstrukce:
<?
function Obrazek($typ) {
// připravíme si jméno funkce
$fce_VytvorImage=“Image“.$typ;
// zkontrolujeme existenci funkce (viz. dále)
if (function_exists($fce_VytvorImage)) {
// vytvoříme si pokusný obrázek o rozměrech 200×200
$imagestream = ImageCreateTrueColor(200,200);
// odešleme hlavičku
Header(„Content-Type: image/“.$typ);
// nakonec odešleme samotný obrázek.
$fce_VytvorImage($imagestream);
}
}
Obrazek(„PNG“); // zavoláme si funkci, která odešle obrázek požadovaného typu
?>
Rozhodně to vypadá lépe, než pomocí kontrukce „if-then-else“ testovat, zda uživatel zadal PNG, GIF nebo jiný typ obrázku. Navíc je tato konstrukce mnohem univerzálnější v případě, kdy se do PHP budou integrovat nové grafické formáty. Pak bude stačit změnit jenom parametr funkce „Obrazek“ a funkce nám ihned odešle obrázek nového typu.
U tohoto příkladu vidíte použití první funkce pro práci s funkcemi function_exists(), která testuje existenci zadané funkce. Na vstupu je jméno testované funkce a na výstupu hodnota „TRUE“, pokud funkce existuje, jinak „FALSE“. Když se zadá parametr, například „EXE“, vrátí „FALSE“, protože funkce ImageEXE neexistuje.
Tvorba funkcí za běhu skriptu
PHP umožňuje „poskládat“ si vlastní funkci za běhu skriptu a tu v témže skriptu ještě spustit. Těmto funkcím se říká anonymní lambda-style funkce a můžeme je vytvářet pomocí funkce create_function(). Funkce má dva argumenty – prvním jsou argumenty naší budoucí funkce a druhý je kód této funkce. Uvedeme si jednoduchý příklad:
// vytvoříme funkci soucet($a,$b)
$soucet = create_function(‚$a,$b‘, ‚return $a+$b;‘);
// napíše se 30
echo $soucet(10,20);
První řádek je stejný jako obyčejný zápis funkce.
function soucet($a,$b) {
return $a+$b;
}
V dalším příkladu si vytvoříme funkci, která setřídí všechny prvky pole. Zde se nám bude hodit funkce usort(), která třídí prvky pole pomocí námi definované funkce. Na vstupu je pole a funkce a na výstupu setříděné pole. Naše funkce musí vracet některou z číselných hodnot x<0
(první proměnná je menší než druhá), x=0
(proměnné jsou stejné) nebo x>0
(první proměnná je větší než druhá).
// vytvoříme si pokusné pole se čtyřmi prvky
$pole = array („aa“,“aaaa“,“a“,“aaa“);
usort($pole, create_function(‚$a,$b‘,’return strlen($b) – strlen($a);‘));
Funkce usort() předá definované funkci vždy dva prvky pole, a podle toho, jaké číslo naše funkce vrátí, setřídí pole.
Další speciální funkce
Zde si uvedeme další funkce, které se mohou hodit ve funkcích, v nichž předem neznáme počet argumentů. Ještě upozorním, že následující funkce mohou být použity pouze uvnitř našich funkcí, jinak dojde k chybě.
- func_get_arg() – vrátí n-tou položku ze seznamu argumentů (začíná se od 0)
- func_get_args() – vrátí pole obsahující seznam argumentů funkce
- func_num_args() – vrátí počet argumentů předaných funkci
Vytvoříme si zjednodušenou funkci Array(), která bude kontrolovat, zda jsme zadali pouze čísla, a pokud ano, vytvoří pole z nich, jinak vypíše chybu.
<?
Function NasArray() {
$PocetArg=func_num_args(); // zjistíme si kolik bylo zadáno argumentů
for ($n=0; $n<$PocetArg; $n++) { // projdeme všechny argumenty
if (is_numeric(func_get_arg($n))) { // otestujeme argument, zda se jedná o číslo
$Pole[$n] = func_get_arg($n); // přidáme argument do pole
} else {
die („ARGUMENT S INDEXEM „.$n.“ – „.func_get_arg($n).“ NENÍ ČÍSLO!“); // když se nejedná o číslo, napíšeme chybu a skript ukončíme
}
}
return $Pole;
}
$pole1 = NasArray(„1″,“2″,“3″,“4″,“5“); // vytvoříme pole; vše je v pořádku
$pole2 = NasArray(„1″,“2″,“3″,“slovo“); // vyskytne se nám chyba
?>
A to je pro tentokrát vše.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Souboj na trhu s CPU pro servery: AMD vs. Intel
8. prosince 2023 -
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
inPage AI: Revoluční nástroj pro tvorbu webů
3. července 2024 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024