W budowie
Materiał edukacyjny · Informatyka

CZĘŚĆ 09

Własne funkcje

PPrezentacja dla nauczyciela

Funkcja pozwala zamknąć powtarzalny algorytm w jednym miejscu, przetestować go na wielu zestawach danych i zachować porządek w kodzie. Na egzaminie INF.03 umiejętność wydzielenia logiki do funkcji to klucz do maksymalnej liczby punktów.

Definicja i wywołanie funkcji

Funkcja grupuje kod, który ma się powtarzać. Definicję zaczynamy słowem function, podajemy nazwę i nawiasy, a kod zamykamy w klamrach. Nazwa nie może zaczynać się cyfrą i nie rozróżnia wielkości liter.

Wywołanie to nazwa z nawiasami: wypiszNaglowek();. Funkcja bez parametrów nie przyjmuje żadnych danych, ale nadal może wypisywać treść albo zwracać wynik.

Dobrą praktyką jest jedna odpowiedzialność: funkcja albo liczy i zwraca, albo wypisuje. Mieszanie obu utrudnia ponowne użycie kodu.

function powitanie() {
    echo '<p>Witaj w kursie PHP!</p>';
}

function linia() {
    echo '<hr>';
}

powitanie();
linia();
powitanie();
1. Czym zaczynamy definicję funkcji?
2. Jak wywołujemy funkcję?
3. Czy nazwy funkcji różnią się wielkością liter?

Parametry i wartości domyślne

Parametry to dane przekazywane do funkcji. W definicji podajemy nazwy zmiennych, a przy wywołaniu wartości: cena(100, 0.23). Liczba argumentów musi się zgadzać z liczbą parametrów.

Parametr może mieć wartość domyślną: function cena($kwota, $vat = 0.23). Dzięki temu wywołanie z jednym argumentem też zadziała, a domyślna wartość zostanie użyta.

Parametry domyślne umieszczamy na końcu listy — inaczej PHP nie wie, który argument pominąć. Typ parametru można dopisać, np. int $ile.

function brutto($kwota, $vat = 0.23) {
    return $kwota * (1 + $vat);
}

echo brutto(100);
echo '<p>Bez VAT: ' . brutto(100, 0) . '</p>';
echo '<p>Inna stawka: ' . brutto(200, 0.08) . '</p>';
4. Gdzie umieszczamy parametr domyślny?
5. Co się stanie przy zbyt małej liczbie argumentów?
6. Do czego służy return?

Zasięg zmiennych i zwracanie wartości

Zmienna utworzona w funkcji jest lokalna — poza nią nie istnieje. Zmienna zewnętrzna nie jest widoczna w funkcji, chyba że przekażemy ją parametrem.

Do modyfikowania zmiennej zewnętrznej służy słowo global, ale w praktyce lepiej zwracać wynik i przypisywać go na zewnątrz. Kod jest wtedy prostszy do sprawdzenia i testowania.

Funkcja może zwrócić tablicę, gdy potrzebnych jest kilka wartości. return kończy działanie funkcji natychmiast — kod po nim się nie wykona.

function statystyki(array $liczby): array {
    return [
        'suma' => array_sum($liczby),
        'srednia' => array_sum($liczby) / max(1, count($liczby)),
        'ile' => count($liczby),
    ];
}

$wynik = statystyki([4, 8, 6]);
echo $wynik['suma'] . ' / ' . $wynik['srednia'];
7. Jaki zasięg ma zmienna w funkcji?
8. Co robi return w funkcji?
9. Jak zwrócić kilka wartości?

Ćwiczenia