Lekcja 6. Funkcje w PHP
ŚredniPo co się tego uczymy?
Gdy ten sam obliczenie ceny po rabacie albo walidacja formularza potrzebne jest w pięciu różnych miejscach strony, nie przepisujesz kodu pięć razy — piszesz go raz, jako funkcję, i wywołujesz w każdym potrzebnym miejscu.
Teoria
Funkcja to nazwany fragment kodu, który możesz wywołać wielokrotnie, zamiast powtarzać ten sam kod w wielu miejscach strony.
Składnia:
function nazwaFunkcji($parametr1, $parametr2) {
// kod funkcji
return $wynik;
}
Parametry mogą mieć wartości domyślne: function powitanie($imie = "Gościu") { ... } — jeśli nie podasz argumentu przy wywołaniu, PHP użyje wartości domyślnej.
Funkcja może, ale nie musi, zwracać wartość przez return. Funkcje bez return (albo z pustym return;) po prostu coś robią (np. wypisują tekst) i kończą działanie.
Dobrze napisane funkcje nazywasz czasownikiem opisującym, co robią (obliczCene, sprawdzWiek, wyswietlProdukt) — to jedna z podstawowych "dobrych praktyk" czystego kodu.
Przykład z życia
Funkcja obliczającą cenę po rabacie może być użyta zarówno na stronie produktu, jak i w podsumowaniu koszyka (Lekcja 18) — napisana raz, poprawnie i przetestowana, działa wszędzie tak samo.
Kod (PHP)
<?php
function obliczCenePoRabacie($cena, $procentRabatu) {
$rabat = $cena * ($procentRabatu / 100);
return $cena - $rabat;
}
function powitanie($imie = "Gościu") {
echo "Witaj, $imie!<br>";
}
// wywołania funkcji
powitanie("Kasia");
powitanie(); // użyje wartości domyślnej "Gościu"
$cenaKoncowa = obliczCenePoRabacie(100, 20);
echo "Cena po rabacie: " . $cenaKoncowa . " zł";
Komentarz i wyjaśnienie kodu
Funkcja obliczCenePoRabacie przyjmuje dwa parametry i ZWRACA wynik przez return — dzięki temu możesz zapisać go do zmiennej $cenaKoncowa i użyć dalej. Funkcja powitanie ma parametr z wartością domyślną ("Gościu") — w drugim wywołaniu powitanie() bez argumentu PHP sam użyje tej domyślnej wartości. Zwróć uwagę: powitanie() nic nie zwraca (brak return), tylko od razu wypisuje tekst przez echo — to różnica między funkcją, która "robi coś", a funkcją, która "oblicza i zwraca wynik".
Ćwiczenie samodzielne
Napisz funkcję obliczVAT($cenaNetto), która zwraca cenę brutto po doliczeniu 23% VAT, i wywołaj ją dla trzech różnych cen.
Zadania do pracy własnej
Napisz funkcję czyPelnoletni($wiek), która zwraca true lub false, i wywołaj ją dla kilku różnych wartości wieku.
Napisz funkcję formatujCene($cena), która zwraca tekst w formacie "X,XX zł" (podpowiedź: number_format()), i użyj jej do wypisania cen trzech produktów.
Napisz funkcję ocenFilmu($ocena), która na podstawie liczby od 1 do 10 zwraca słowny komentarz ("Arcydzieło", "Bardzo dobry", "Przeciętny", "Słaby") — użyj wewnątrz niej instrukcji warunkowej z Lekcji 3 — a następnie zastosuj ją do listy pięciu filmów z ocenami zapisanej w tablicy z Lekcji 5.
Typowe błędy
Częsty błąd to oczekiwanie wyniku z funkcji, która nic nie zwraca (brak return) — zmienna przypisana z takiego wywołania będzie miała wartość null. Drugi błąd: pomylenie kolejności parametrów przy wywołaniu funkcji z wieloma argumentami. Trzeci: próba użycia zmiennej zdefiniowanej WEWNĄTRZ funkcji poza jej ciałem — zmienne lokalne funkcji nie są widoczne na zewnątrz (tzw. zasięg zmiennych).
Nawiązanie do egzaminu zawodowego
To realizacja efektu INF.03.5.2.6 ("stosuje funkcje oraz wybrane biblioteki skryptowych języków programowania") — umiejętność pisania własnych funkcji jest też podstawą "czystego kodu", który jest oceniany w części praktycznej egzaminu.