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. 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ń.
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?
W PHP funkcję definiujemy słowem kluczowym function, np. function powitaj() { ... }.
Co robi instrukcja return wewnątrz funkcji?
return kończy wykonanie funkcji i przekazuje wskazaną wartość do miejsca, gdzie funkcja została wywołana.
Jaki typ zwracany należy podać, gdy funkcja nic nie zwraca?
void informuje PHP (i czytelnika kodu), że funkcja nie zwraca żadnej wartości — tylko wykonuje jakieś działanie.
Ć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