Lekcja 5 – Dodatkowe podstawy funkcji w PHP

Zasięg zmiennych w funkcjach

Zasięg zmiennej określa, gdzie w programie dana zmienna jest dostępna. W PHP istnieją trzy główne rodzaje zasięgu zmiennych: lokalny, globalny i statyczny.

Zasięg lokalny

Zmienne zdefiniowane wewnątrz funkcji mają zasięg lokalny, co oznacza, że są dostępne tylko wewnątrz tej funkcji i nie można ich użyć poza nią. Każda zmienna stworzona wewnątrz funkcji jest oddzielona od zmiennych o tej samej nazwie istniejących poza funkcją.

Przykład:

<?php
  function powitanie() {
    $imie = "Jan";
    echo "Cześć, " . $imie;
  }

  powitanie(); // Wyświetli: Cześć, Jan
  echo $imie; // Spowoduje błąd, ponieważ $imie jest zmienną lokalną
?>

Zmienne utworzone wewnątrz funkcji (takie jak $imie w powyższym przykładzie) istnieją tylko podczas wykonywania funkcji. Po zakończeniu działania funkcji, zmienna zostaje usunięta z pamięci.

Zasięg globalny

Zmienne globalne są dostępne w całym skrypcie, ale funkcje nie mają do nich dostępu domyślnie. Aby uzyskać dostęp do zmiennej globalnej wewnątrz funkcji, należy użyć słowa kluczowego global.

Przykład:

<?php
  $imie = "Jan";

  function powitanie() {
    global $imie;
    echo "Cześć, " . $imie;
  }

  powitanie(); // Wyświetli: Cześć, Jan
?>

W tym przykładzie zmienna $imie jest zmienną globalną, ale aby uzyskać do niej dostęp w funkcji powitanie, musimy ją zadeklarować jako globalną wewnątrz funkcji.

Zasięg statyczny

Zmienna statyczna w funkcji jest inicjalizowana tylko raz i zachowuje swoją wartość pomiędzy kolejnymi wywołaniami funkcji. Jest to przydatne, gdy chcemy, aby wartość zmiennej była pamiętana w różnych iteracjach funkcji.

Przykład:

<?php
  function licznik() {
    static $liczba = 0;
    $liczba++;
    echo $liczba;
  }

  licznik(); // Wyświetli: 1
  licznik(); // Wyświetli: 2
  licznik(); // Wyświetli: 3
?>

Zmienna $liczba zostanie zainicjowana tylko raz, a jej wartość będzie pamiętana pomiędzy kolejnymi wywołaniami funkcji.

Argumenty z wartościami domyślnymi

PHP umożliwia ustawienie wartości domyślnych dla argumentów funkcji. Oznacza to, że jeśli wywołasz funkcję bez podania wartości dla tych argumentów, PHP automatycznie przypisze im wartości domyślne. Jest to bardzo przydatne, gdy chcesz, aby funkcja działała nawet wtedy, gdy nie podasz wszystkich danych.

Przykład:

<?php
  function powitanie($imie = "gość", $wiek = 18) {
    echo "Cześć, " . $imie . "! Masz " . $wiek . " lat.<br>";
  }

  powitanie(); // Wyświetli: Cześć, gość! Masz 18 lat.
  powitanie("Anna"); // Wyświetli: Cześć, Anna! Masz 18 lat.
  powitanie("Piotr", 25); // Wyświetli: Cześć, Piotr! Masz 25 lat.
?>

W powyższym przykładzie funkcja powitanie ma dwa argumenty z wartościami domyślnymi: $imie i $wiek. Jeśli nie przekażesz argumentów podczas wywoływania funkcji, PHP użyje wartości domyślnych ("gość" i 18). Jeśli podasz jeden argument, tylko ten zostanie zmieniony, a wartość domyślna dla drugiego zostanie zachowana.

Funkcje zwracające wiele wartości

Chociaż PHP może zwracać tylko jedną wartość z funkcji, można wykorzystać tablice do zwracania wielu wartości jednocześnie. Tablice umożliwiają przekazywanie różnych typów danych jako wynik działania funkcji, co pozwala na elastyczniejsze programowanie.

Przykład:

<?php
  function podziel($liczba1, $liczba2) {
    $iloraz = $liczba1 / $liczba2;
    $reszta = $liczba1 % $liczba2;
    return array($iloraz, $reszta);
  }

  list($iloraz, $reszta) = podziel(10, 3);
  echo "Iloraz: " . $iloraz . "<br>"; // Wyświetli: Iloraz: 3.3333...
  echo "Reszta: " . $reszta; // Wyświetli: Reszta: 1
?>

W powyższym przykładzie funkcja podziel zwraca tablicę zawierającą dwa elementy: iloraz i resztę z dzielenia. Funkcja list() pozwala na przypisanie tych dwóch wartości do oddzielnych zmiennych. Dzięki temu można uzyskać więcej informacji z jednego wywołania funkcji, co sprawia, że kod jest bardziej zwięzły i łatwiejszy w obsłudze.

Referencje w argumentach funkcji

Domyślnie argumenty są przekazywane do funkcji przez wartość, co oznacza, że funkcja pracuje na kopii przekazanej zmiennej. Oznacza to, że zmiany dokonane w funkcji nie mają wpływu na oryginalną zmienną. Możemy jednak przekazywać argumenty przez referencję, co pozwala na modyfikację oryginalnej zmiennej wewnątrz funkcji.

Aby przekazać argument przez referencję, należy dodać symbol & przed nazwą argumentu w deklaracji funkcji.

Przykład:

<?php
  function zwiększ_o_jeden(&$liczba) {
    $liczba++;
  }

  $x = 5;
  zwiększ_o_jeden($x);
  echo $x; // Wyświetli: 6
?>

W tym przykładzie funkcja zwiększ_o_jeden przyjmuje argument przez referencję, co oznacza, że zmienna $x zostanie bezpośrednio zmodyfikowana wewnątrz funkcji. Wynikiem wywołania funkcji będzie zwiększenie wartości zmiennej $x o 1.

Podsumowanie

W tej lekcji omówiliśmy dodatkowe podstawy funkcji w PHP, koncentrując się na zasięgu zmiennych, argumentach z wartościami domyślnymi, zwracaniu wielu wartości i użyciu referencji w funkcjach. Te aspekty są kluczowe dla zrozumienia, jak efektywnie wykorzystywać funkcje w codziennym programowaniu.

Gratulacje! Ukończyłeś lekcję 5.
Przejdź teraz do lekcji 6 >> Praca z formularzami HTML w PHP


Spis Treści - darmowy kurs PHP

Wprowadzenie: Instalacja środowiska PHP
Lekcja 1: Podstawy składni PHP
Lekcja 2: Funkcje i instrukcje warunkowe w PHP
Lekcja 3: Pętle w PHP
Lekcja 4: Tablice w PHP
Lekcja 5: Dodatkowe podstawy funkcji w PHP
Lekcja 6: Praca z formularzami HTML w PHP
Lekcja 7: Obsługa plików w PHP
Lekcja 8: Sesje i ciasteczka w PHP
Lekcja 9: Podstawy operacji na bazach danych MySQL z PHP
Lekcja 10: Prepared Statements w PHP i bezpieczeństwo aplikacji
Lekcja 11: Zarządzanie użytkownikami – rejestracja, logowanie i autoryzacja w PHP
Lekcja 12: Wzorce projektowe w PHP – wprowadzenie do wzorca MVC
Lekcja 13: Zaawansowane techniki pracy z bazami danych w PHP
Lekcja 14: Testowanie jednostkowe w PHP z PHPUnit
Lekcja 15: Tworzenie i korzystanie z API RESTful w PHP
Lekcja 16: Obsługa plików JSON i XML w PHP

Dodatki
- Spis najważniejszych funkcji PHP