PHP · funkcje

Funkcje PHP — parametry, zwracane wartości i ćwiczenia

Funkcje z typami, return, wartości domyślne, argumenty nazwane i strict_types w trzech zadaniach. Przypadki brzegowe i TypeError.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

<?php
function kwadrat(int $n): int
{
    return $n * $n;
}
echo kwadrat(7);
49
Funkcja z typami zwraca wynik.

Funkcja zbiera powtarzalny fragment kodu pod jedną nazwą. W PHP 8 można do niej dodać typy parametrów i wyniku, wartości domyślne oraz argumenty nazwane — dzięki temu kod jest czytelniejszy, a błędy wychodzą na jaw od razu. Na lekcji uczniowie piszą trzy funkcje i sprawdzają, co daje włączenie trybu ścisłego typów.

Scenariusz jest przeznaczony na 45 minut dla klasy znającej warunki, pętle i tablice w PHP — na przykład po lekcji o tablicach.

Przygotowanie stanowisk

Potrzebny jest PHP 8.x uruchamiany w terminalu (na przykład z pakietu XAMPP; sprawdź polecenie php -v). Rozpakuj pakiet z sekcji materiałów do osobnego folderu i przejdź do niego w terminalu. Skrypty uruchamiasz poleceniem php start.php; serwer WWW nie jest potrzebny, a wynik pojawia się w terminalu. Jeśli pobierasz pojedyncze pliki .php.txt ze strony zamiast ZIP, usuń końcówkę .txt lokalnie.

Cele i plan lekcji

Po zajęciach uczeń potrafi:

  • zdefiniować funkcję z typowanymi parametrami i typem wyniku;
  • ustawić wartość domyślną parametru i wywołać funkcję argumentami nazwanymi;
  • wyjaśnić działanie declare(strict_types=1) i obsłużyć TypeError;
  • przetestować funkcję na przypadkach brzegowych.
CzasPraca na lekcji
0–5 minProblem: ten sam wzór w kilku miejscach
5–15 minfunction, parametry, return, typy
15–22 minWartości domyślne, argumenty nazwane, strict_types
22–37 minTrzy zadania samodzielne
37–42 minPrzypadki brzegowe
42–45 minPytania kontrolne

Definicja i typy

function powitaj(string $imie): string
{
    return "Czesc, $imie!";
}

string $imie to parametr z typem, a : string po nawiasie — typ zwracanej wartości. Instrukcja return kończy funkcję i oddaje wynik; typ void oznacza brak wyniku. Parametr może mieć wartość domyślną (string $zwrot = "Czesc") i wtedy można go pominąć. W PHP 8 argumenty można podawać z nazwami w dowolnej kolejności: powitaj(zwrot: "Hej", imie: "Ewa").

Domyślnie PHP próbuje w razie potrzeby zamieniać typy (np. tekst "7" na liczbę 7). Dyrektywa declare(strict_types=1); na początku pliku wyłącza to zachowanie: przekazanie tekstu tam, gdzie oczekiwano int, zgłasza TypeError, który można przechwycić blokiem try ... catch. Funkcje zdefiniowane w pliku są dostępne w całym pliku, także przed definicją.

Zadania

Zadanie 1. Kwadrat. Napisz kwadrat(int $n): int i sprawdź 7, −3 i 0.

Zadanie 2. Średnia. Napisz srednia(array $lista): float zwracającą średnią z dwoma miejscami; dla pustej tablicy ma zwrócić 0.0. Sprawdź [7, 9, 4, 10] i [].

Zadanie 3. Powitanie. Napisz powitaj(string $imie, string $zwrot = "Czesc"): string. Wywołaj ją trzy razy: z jednym argumentem, z dwoma i z argumentami nazwanymi w odwrotnej kolejności. Włącz strict_types i przechwyć TypeError przy wywołaniu kwadrat("7").

Dla chętnych: napisz ileParzystych(array $lista): int z użyciem array_filter i sprawdź ją dla [1, 2, 3, 4, 6] oraz tablicy pustej.

Rozwiązanie i wyniki

<?php
declare(strict_types=1);

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

function srednia(array $lista): float
{
    if (count($lista) === 0) {
        return 0.0;
    }
    return round(array_sum($lista) / count($lista), 2);
}

function powitaj(string $imie, string $zwrot = "Czesc"): string
{
    return "$zwrot, $imie!";
}

// Zadanie 1
echo kwadrat(7), " ", kwadrat(-3), " ", kwadrat(0), "\n";

// Zadanie 2
echo srednia([7, 9, 4, 10]), " ", srednia([]), "\n";

// Zadanie 3
echo powitaj("Ola"), "\n";
echo powitaj("Ola", "Witaj"), "\n";
echo powitaj(zwrot: "Hej", imie: "Ewa"), "\n";
try {
    echo kwadrat("7");
} catch (TypeError $e) {
    echo "TypeError: argument musi byc liczba calkowita\n";
}

Program wypisze:

49 9 0
7.5 0
Czesc, Ola!
Witaj, Ola!
Hej, Ewa!
TypeError: argument musi byc liczba calkowita

Bez strict_types PHP przekonwertowałby tekst "7" na liczbę i zwróciłby 49; w trybie ścisłym zgłasza TypeError. Zadanie dla chętnych (rozszerzenie.php) wypisuje:

3 0

Typowe błędy

ObjawCo sprawdzić
Fatal error: Uncaught TypeErrorPrzekazano argument niewłaściwego typu w trybie strict_types.
Funkcja nic nie wypisujeWynik zwrócono return, ale nie wypisano go instrukcją echo.
Fatal error: Cannot redeclareFunkcja o tej nazwie jest już zdefiniowana.
ArgumentCountErrorZa mało argumentów — parametr bez wartości domyślnej nie może być pominięty.
declare(strict_types=1) nie działaDyrektywa musi być pierwszą instrukcją pliku (zaraz po <?php).
Wynik ma wiele cyfr po przecinkuBrakuje round(..., 2).

Pytania kontrolne i punktacja

  1. Co oznacza : int po nawiasie w definicji funkcji?
  2. Do czego służy declare(strict_types=1)?
  3. Jak wywołać funkcję z argumentami nazwanymi?

Odpowiedzi: Funkcja ma zwracać liczbę całkowitą. Wyłącza automatyczną zamianę typów argumentów — niewłaściwy typ zgłasza TypeError. funkcja(parametr: wartość), np. powitaj(zwrot: "Hej", imie: "Ewa").

Proponowana punktacja (razem 10 punktów): zadanie 1 — definicja z typami 2 pkt, trzy wyniki 1 pkt; zadanie 2 — średnia z zaokrągleniem 2 pkt, obsługa pustej tablicy 1 pkt; zadanie 3 — wartość domyślna 1 pkt, argumenty nazwane 1 pkt, strict_types i TypeError 1 pkt, wszystkie trzy wywołania 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.

Materiały do pobrania

Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.

Co dalej?

Następny krok to bezpieczne wypisywanie danych i obsługa formularzy z walidacją. Ten materiał rozwija dział o funkcjach w kursie PHP w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.

Źródła techniczne: funkcje w podręczniku PHP oraz deklaracje typów. Zobacz też lekcję o formularzach PHP.

Poprowadź kolejne lekcje PHP

Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.

Kup dostęp do kursu PHP →

Zobacz program kursu