Definiowanie funkcji

🎯 Po tej lekcji napiszesz własną funkcję przyjmującą parametry i zwracającą wartość.

Wyobraź sobie ekspres do kawy. Wrzucasz ziarna, naciskasz przycisk — i zawsze dostaniesz kawę. Nie musisz za każdym razem tłumaczyć maszynie, jak mleć ziarna i podgrzewać wodę. Funkcja w PHP działa dokładnie tak samo: raz opisujesz przepis, a potem używasz go tyle razy, ile chcesz.

Czym jest funkcja?

Funkcja to wydzielony fragment kodu z własną nazwą. Zamiast pisać ten sam kod wielokrotnie, piszesz go raz — a potem wywołujesz go z dowolnego miejsca w programie.

<?php
declare(strict_types=1);

function powitaj(): void
{
    echo 'Cześć, świecie!';
}

powitaj(); // wynik: Cześć, świecie!
powitaj(); // wynik: Cześć, świecie!

Funkcję definiujesz słowem function, nadajesz jej nazwę i umieszczasz kod w nawiasach klamrowych { }. Żeby ją uruchomić, wywołujesz ją przez nazwę z nawiasami okrągłymi ().

Parametry — dane wejściowe

Funkcja staje się naprawdę użyteczna, gdy możesz przekazać jej dane. Służą do tego parametry:

<?php
declare(strict_types=1);

function powitaj(string $imie): void
{
    echo 'Cześć, ' . $imie . '!';
}

powitaj('Ola');  // wynik: Cześć, Ola!
powitaj('Kuba'); // wynik: Cześć, Kuba!

Parametr $imie działa jak zmienna wewnątrz funkcji — tylko że jej wartość przekazujesz przy każdym wywołaniu. Wartość którą podajesz przy wywołaniu to argument.

Możesz zdefiniować dowolną liczbę parametrów, oddzielając je przecinkami:

<?php
declare(strict_types=1);

function opisProduktu(string $nazwa, float $cena): void
{
    echo $nazwa . ' kosztuje ' . $cena . ' zł';
}

opisProduktu('Jabłka', 3.49); // wynik: Jabłka kosztuje 3.49 zł
opisProduktu('Chleb', 4.99);  // wynik: Chleb kosztuje 4.99 zł

return — wynik funkcji

Funkcja może nie tylko coś robić (jak wyświetlać tekst), ale też zwracać wartość do miejsca, w którym ją wywołano. Służy do tego słowo kluczowe return:

<?php
declare(strict_types=1);

function suma(int $a, int $b): int
{
    return $a + $b;
}

$wynik = suma(3, 4);
echo $wynik;       // wynik: 7

echo suma(10, 20); // wynik: 30
💡 void vs typ zwracany: Gdy funkcja nic nie zwraca — tylko wykonuje jakieś działanie (np. wyświetla tekst) — jako typ zwracany piszesz void. Gdy zwraca wartość, podajesz jej typ: int, string, float, bool itd.

Instrukcja return natychmiast kończy działanie funkcji — kod umieszczony po niej w obrębie tej samej funkcji już się nie wykona:

<?php
declare(strict_types=1);

function czyDorosly(int $wiek): bool
{
    if ($wiek >= 18) {
        return true;  // funkcja kończy się tutaj
    }
    return false;     // lub tutaj, gdy wiek < 18
}

var_dump(czyDorosly(20)); // wynik: bool(true)
var_dump(czyDorosly(15)); // wynik: bool(false)

Kompletny przykład

Oto funkcja obliczająca cenę po rabacie — łączy parametry i return:

<?php
declare(strict_types=1);

function cenaPoRabacie(float $cena, float $rabatProcent): float
{
    $rabat = $cena * ($rabatProcent / 100);
    return round($cena - $rabat, 2);
}

echo cenaPoRabacie(200.0, 25); // wynik: 150
echo cenaPoRabacie(49.99, 10); // wynik: 44.99

Funkcja cenaPoRabacie przyjmuje cenę i procent rabatu, oblicza wynik i go zwraca. Możesz jej używać wielokrotnie bez powtarzania obliczeń.

⚠️ Częsty błąd: Zapominanie o return — funkcja bez return zwróci null, co może prowadzić do trudnych do wykrycia błędów. Jeśli zadeklarujesz typ zwracany, a nie zwrócisz pasującej wartości, PHP zgłosi błąd (TypeError) w momencie wywołania funkcji.

W kolejnej lekcji dowiesz się, jak deklarować typy parametrów i typ zwracany oraz jak ustawiać wartości domyślne — to czyni funkcje jeszcze bardziej elastycznymi.

Sprawdź się

Jakim słowem kluczowym definiuje się funkcję w PHP?

Co robi instrukcja return wewnątrz funkcji?

Jaki typ zwracany należy podać, gdy funkcja nic nie zwraca?

Ćwiczenie

Napisz funkcję kwadrat(int $n): int, która zwraca kwadrat podanej liczby (n × n). Wywołaj ją dla liczb 3, 5 i 10 i wyświetl wyniki.

Pokaż rozwiązanie
<?php
declare(strict_types=1);

function kwadrat(int $n): int
{
    return $n * $n;
}

echo kwadrat(3);  // wynik: 9
echo kwadrat(5);  // wynik: 25
echo kwadrat(10); // wynik: 100