IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

14. diel - Tvorba vlastných funkcií v PHP

V predchádzajúcom cvičení, Riešené úlohy k 13. lekcii PHP, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 13. lekcii PHP , sme si predstavili a vyskúšali niekoľko funkcií pre prácu s textovými reťazcami. V dnešnom PHP tutoriále si ukážeme, ako vytvárať vlastné funkcie.

Tvorba vlastných funkcií

Zatiaľ sme len používali cudzie funkcie. Nie je však nič ťažké vytvoriť si funkciu vlastné. Rozdeľovanie skriptov do funkcií má nasledujúce výhody:

  • Prehľadnosť - Ak sa nejaký algoritmus skladá z viacerých krokov, vytvoríme funkciu pre každý tento krok a funkcie potom voláme po sebe. Zoberme si napr. Náš emailový formulár z minulých lekcií. Ten zvalidoval či bolo všetko vyplnené a potom odoslal email. Všetko bolo napísané na jednom mieste a zamotané do seba. Správne by sme na danom mieste mali volať len funkciu pre validáciu a funkciu pre odoslanie. Každá funkcia potom obsahuje len to, čo do nej patrí. Kód sa stáva prehľadnejším.
  • DRY (Neopakujme sa) - Skratka DRY označuje Nechcem Repeat Yourself, teda neopakujte sa. Ide o uznávaný programátorský princíp, ktorý odsudzuje duplikované kód. Ak chceme nejakú časť kódu použiť viackrát, nemusíme ju opisovať, ale oddelíme ju do funkcie. Potom len zavoláme jednu funkciu na viacerých miestach programu. Keď potom chceme v kóde niečo opraviť, nehľadáme chybu na niekoľkých miestach, ale opravíme ju len v tej jednej funkcii.
  • Možnosť použitia knižníc - Funkcie, ktoré často používate, môžete vkladať do samostatných súborov, ktorým sa niekedy hovorí knižnice (anglicky library). Ak si vytvoríte napr. Knižnicu pre prihlasovanie užívateľov, môžete ju potom len vložiť do iného projektu, načítať a začať používať danej funkcie, bez toho aby ste niečo znova programovali.

Pozn .: V ďalších seriáloch si ukážeme aj ako členiť funkcie do objektov. Dosiahneme tým naozaj veľmi čitateľného kódu, ktorý je možné navyše rozširovať.

Správny program by mal byť poskladaný z niekoľkých kratších funkcií, nemal by vyzerať ako dlhá rezance kódu :)

Jednoduchá funkcie

Vytvorme si úplne jednoduchú funkciu, ktorá len niečo vypíše. Funkciu deklarujeme pomocou kľúčového slova function. Za ním nasleduje názov funkcie (ten by mal byť písaný v CamelCase) a zátvorky. Telo funkcia je potom vložené do bloku zo zložených zátvoriek.

Funkcia by sa mala vymenovať podľa toho, čo robí. Mala by tiež robiť vždy len jednu vec a pokiaľ potrebujeme urobiť 2 veci, vytvoríme si na to 2 funkcie. Ako názov funkcie sa mi osvedčilo používať sloveso v rozkazovacom spôsobe (imperatívu). Akonáhle funkciu niekde deklarujeme, môžeme ju nižšie volať. Urobíme to jednoducho napísaním jej názvu a zátvoriek.

Nasledujúci kód vložíme kamkoľvek do PHP sekvencie:

function pozdrav()
{
    echo('Vitajte na mojom webe');
}

pozdrav();

výsledok:

Tvoja stránka
localhost

Navrchu deklarujeme funkciu, nižšie hotovú funkciu zavoláme.

Funkciu musíme pochopiteľne vždy deklarovať nad miestom, odkiaľ ju voláme. PHP dekóduje zdrojový kód od začiatku do konca a ak by sme to urobili naopak, narazilo by na volanie funkcie, o ktorej si ešte "neprečítal".

Funkcie s parametrami

Funkciu samozrejme môžeme vložiť aj nejaké parametre. Na jednoduchom príklade si ukážme funkciu, ktorá vypíše súčet dvoch čísel. Takto triviálne funkciu by sme v praxi síce nedeklaroval, ale ako príklad poslúži dobre a reálnu funkciu si ukážeme na konci. Parametre vkladáme ako premenné do zátvorky v hlavičke funkcie a oddeľujeme ich čiarkou.

function secti($a, $b)
{
    $soucet = $a + $b;
    echo("Súčet: $soucet");
}

Funkciu následne voláme takto:

secti(10, 20);

Pri volaní funkcie môžeme do parametrov samozrejme vložiť i premenné:

$a = $_POST['cislo1'];
$b = 20;
secti($a, $b);

Z funkcií nemožno pristupovať k nejakej premennej, ktorá je definovaná mimo funkciu. Vo funkcii môžete pristupovať len k premenným, ktoré prišli v parametri a maximálne k superglobálním poliam, ako sú $_GET a $_POST. Síce to ide obísť pomocou kľúčového slova global, ale to nerobte, pretože taká funkcia stráca zmysel. Keď niečo nejde, má to väčšinou nejaký zmysel a nemali by sme hľadať spôsob, ako obísť zákaz, ale ako to urobiť správne :) Všetko, čo funkcie potrebuje, jej jednoducho odovzdáme vo vstupných parametroch.

Funkcie s návratovou hodnotou

Funkcia môže tiež vracať nejakú hodnotu. V ukážkach vyššie sme vo funkciách len vypisovali. V praxi sa takéto funkcie príliš nepíšu, keďže nie sú univerzálne. Predstavte si, že nechceme súčet vypísať, ale použiť ho ako medzivýsledok pri ďalšom výpočtu. Preto funkcia výslednú hodnotu väčšinou vracia. Tam, kde bola funkcia volaná, si s ňou potom môžeme urobiť čo chceme. Funkcia môže vždy vrátiť len jednu hodnotu a akonáhle ju vráti, tak sa na tom mieste ukončí a ďalšie kód v nej sa už nevykoná. Hodnotu vraciame pomocou kľúčového slova return.

Ak potrebujeme vrátiť viac hodnôt, môžeme vrátiť pole, alebo si pre každú hodnotu vytvoriť samostatnú funkciu. Záleží na konkrétnom prípade.

Upravme našej sčítací funkciu tak, aby výsledok miesto vypisovania vracala:

function secti($a, $b)
{
    $soucet = $a + $b;
    return $soucet;
}

Funkciu by sme potom volali nasledovne:

$soucet = secti(10, 20);
echo("Súčet: $soucet <br />");
echo("Dvojnásobok súčtu: " . ($soucet * 2));

Vidíte, že keď naša funkcia hodnoty vracia, je úplne univerzálne a môžeme ju použiť ako k výpisu, tak k ďalšej práci. Výsledok môžeme neskôr uložiť napríklad do databázy, súboru, kamkoľvek.

Funkcie na odosielanie emailu

Ako veľmi užitočná funkcia je funkcia na posielanie emailov. Teraz máme už dostatok vedomostí na to, aby sme si takú funkciu napísali. Keď sa pozrieme späť na kód na odoslanie emailu v našom formulári, dáme dokopy nasledujúce funkciu:

function odesliEmail($adresa, $predmet, $odesilatel, $zprava)
{
    $hlavicka = 'From:' . $odesilatel;
    $hlavicka .= "\nMIME-Version: 1.0\n";
    $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
    $uspech = mb_send_mail($adresa, $predmet, $zprava, $hlavicka);
    return $uspech;
}

Funkcia si pripraví hlavičku na základe vstupných parametrov a tú potom odovzdá funkciu mb_send_mail(), ktorá email odošle. Táto funkcia vráti hodnotu 0 / 1 podľa toho, či bolo odoslanie úspešné alebo nie. Toto hodnotu potom vrátime aj našej funkcií.

Volanie funkcie bude nasledujúci:

$uspech = odesliEmail('[email protected]', 'Test emailu', '[email protected]', 'Text správy');
if (!$uspech)
    echo('Email sa nepodarilo odoslať, skontrolujte adresu a odosielateľa');

Určite uznáte, že písať tých 5 riadkov, čo je teraz vo funkcii, na každom mieste, kde potrebujeme odoslať email, je minimálne zdržujúci a neprehľadné. Takto napíšeme len jeden riadok. Funkcia však funguje len v tom súbore, v ktorom je deklarovaná. V budúcej lekcii, Riešené úlohy k 14. lekcii PHP , si ukážeme, ako zabezpečiť, aby sme funkciu mohli používať úplne všade bez toho, aby sme ju opisovali.

V nasledujúcom cvičení, Riešené úlohy k 14. lekcii PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Riešené úlohy k 13. lekcii PHP
Všetky články v sekcii
Základné konštrukcie jazyka PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 14. lekcii PHP
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity