Czym się różnią zmienne globalne od zmiennych lokalnych w PHP?

Jeśli zaczynasz swoją przygodę z PHP, pewnie już spotkałeś się ze słowem „zmienna”. I nic dziwnego — bez zmiennych nie da się napisać nawet prostego programu. To właśnie one przechowują dane, z którymi nasz kod pracuje. Ale… czy wiesz, że istnieją różne rodzaje zmiennych w zależności od miejsca, w którym są zadeklarowane i używane?
Mowa oczywiście o zmiennych lokalnych i zmiennych globalnych. I chociaż brzmi to poważnie, różnica między nimi jest całkiem prosta — ale bardzo ważna. Zrozumienie jej pozwoli Ci uniknąć masy błędów, które popełnia większość początkujących programistów PHP.

W tym artykule wytłumaczę Ci:

  • czym dokładnie są zmienne lokalne i globalne,
  • jak działają w praktyce,
  • jak z nich korzystać (i kiedy lepiej tego nie robić),
  • oraz pokażę kilka przykładów kodu, które rozjaśnią temat.

Zaczynajmy!

Co to jest zmienna w PHP?

Zanim przejdziemy do globalnych i lokalnych, przypomnijmy sobie krótko, czym w ogóle jest zmienna.
W PHP zmienna to miejsce w pamięci, w którym można przechowywać dane — na przykład liczbę, tekst, tablicę czy obiekt. Każda zmienna w PHP zaczyna się od znaku $, np.:

<?php
$imie = "Kasia";
$wiek = 25;
echo "Mam na imię $imie i mam $wiek lat.";
?>

Proste, prawda?
Ale teraz wyobraź sobie, że tworzysz funkcję, w której chcesz użyć tej samej zmiennej. I nagle okazuje się, że PHP krzyczy błędem lub nie widzi Twojej zmiennej. Dlaczego?
Bo — i tu dochodzimy do sedna — zmienna ma zasięg (ang. scope), czyli obszar, w którym „istnieje” i może być używana.

Zasięg zmiennej (variable scope)

Zasięg zmiennej określa, gdzie w kodzie możesz się do niej odwołać. W PHP istnieją cztery główne zasięgi:

  1. Lokalny (local) — zmienna widoczna tylko wewnątrz funkcji.
  2. Globalny (global) — zmienna widoczna w całym skrypcie, poza funkcjami.
  3. Statyczny (static) — zmienna, która zachowuje wartość między wywołaniami funkcji.
  4. Superglobalny (superglobal) — specjalne zmienne dostępne zawsze, wszędzie (np. $_POST, $_GET).

W tym artykule skupimy się na dwóch pierwszych: globalnych i lokalnych, bo to one najczęściej powodują zamieszanie.

Zmienne lokalne — co to takiego?

Zmienne lokalne to takie, które istnieją tylko wewnątrz funkcji lub bloku kodu, w którym zostały zadeklarowane.
Nie możesz się do nich odwołać spoza tej funkcji — PHP po prostu ich „nie widzi”.

Zobacz przykład:

<?php
function przywitaj() {
    $imie = "Ania"; // zmienna lokalna
    echo "Cześć, $imie!";
}

przywitaj();

// próba dostępu spoza funkcji
echo $imie; // BŁĄD! Zmienna nie istnieje tutaj
?>

Co się dzieje?
Zmienna $imie została utworzona wewnątrz funkcji przywitaj(). Gdy funkcja się kończy — zmienna znika.
Poza nią nie ma po niej śladu, więc PHP wyświetli błąd lub pustą wartość.

To bardzo podobne do sytuacji, gdy masz pudełko z napisem „Ania” w pokoju. Możesz je otworzyć, dopóki jesteś w tym pokoju (czyli w funkcji). Ale gdy wyjdziesz — pudełko zostaje w środku, a Ty nie masz do niego dostępu.

Zmienne globalne — czyli zmienne widoczne wszędzie

Zmienna globalna to taka, która została zadeklarowana poza funkcją, na najwyższym poziomie kodu (czyli w tzw. globalnym zasięgu).
Teoretycznie jest „widoczna” wszędzie, ale… nie do końca.

Zobacz przykład:

<?php
$imie = "Tomek"; // zmienna globalna

function przywitaj() {
    echo "Cześć, $imie!"; // BŁĄD! PHP nie widzi zmiennej globalnej wewnątrz funkcji
}

przywitaj();
?>

Zaskoczony?
W PHP zmienne globalne nie są automatycznie dostępne wewnątrz funkcji.
Dlaczego? Bo funkcje mają swój własny, odizolowany „świat” — własny zasięg.
Jeśli chcesz użyć zmiennej globalnej w środku funkcji, musisz ją zadeklarować jako globalną.

Zróbmy to poprawnie:

<?php
$imie = "Tomek";

function przywitaj() {
    global $imie; // odwołanie do zmiennej globalnej
    echo "Cześć, $imie!";
}

przywitaj();
?>

Teraz działa!
Słowo kluczowe global mówi PHP: „Hej, chcę użyć tej zmiennej z głównego zakresu, a nie tworzyć nową lokalną”.

Różnica między zmienną globalną a lokalną

Spróbujmy to podsumować w prosty sposób:

CechaZmienna lokalnaZmienna globalna
Gdzie jest deklarowanaWewnątrz funkcjiPoza funkcjami
DostępnośćTylko w funkcjiW całym skrypcie (ale nie bezpośrednio w funkcjach)
ŻywotnośćTylko podczas działania funkcjiPrzez cały czas trwania skryptu
Jak uzyskać dostęp w funkcjiAutomatyczniePrzez global lub $GLOBALS
Przykład$x = 5; wewnątrz funkcji$x = 5; poza funkcją

Jak korzystać ze zmiennych globalnych – z głową!

Zmienne globalne mogą wydawać się wygodne — w końcu można ich użyć „wszędzie”. Ale uwaga: to pułapka.
Nadużywanie ich prowadzi do tzw. spaghetti code, w którym trudno się połapać.
Jeśli masz 10 funkcji, które zmieniają tę samą globalną zmienną, bardzo łatwo o błąd.

Zamiast tego lepiej przekazywać zmienne jako argumenty funkcji.
To czystsze, bezpieczniejsze i bardziej przewidywalne rozwiązanie.

Zobacz dwa podejścia:

❌ Zły sposób — używanie globali

<?php
$licznik = 0;

function zwieksz() {
    global $licznik;
    $licznik++;
}

zwieksz();
zwieksz();
echo $licznik; // 2
?>

Działa, ale jeśli kod stanie się większy, może być trudno śledzić, kto zmienia $licznik.

✅ Dobry sposób — przekazywanie jako argument

<?php
function zwieksz($licznik) {
    return $licznik + 1;
}

$licznik = 0;
$licznik = zwieksz($licznik);
$licznik = zwieksz($licznik);

echo $licznik; // 2
?>

Prościej, bezpieczniej i bardziej przewidywalnie.

Alternatywa: tablica $GLOBALS

PHP udostępnia specjalną superglobalną tablicę o nazwie $GLOBALS.
Zawiera ona wszystkie zmienne globalne, do których możesz się odwołać w dowolnym miejscu, nawet wewnątrz funkcji — bez użycia słowa global.

Zobacz:

<?php
$imie = "Ola";

function przywitaj() {
    echo "Cześć, " . $GLOBALS['imie'] . "!";
}

przywitaj(); // Cześć, Ola!
?>

To przydatne, jeśli potrzebujesz szybkiego dostępu, ale nie chcesz deklarować global $imie; w każdej funkcji.
Jednak uwaga: nadużywanie $GLOBALS też nie jest dobrym pomysłem. W dużych projektach łatwo się w tym pogubić.

Jak PHP zarządza zmiennymi w pamięci?

To może brzmieć technicznie, ale zrozumienie tego pozwoli Ci lepiej pisać kod.
Gdy tworzysz zmienną globalną, PHP przechowuje ją w pamięci do końca działania skryptu.
Zmienne lokalne natomiast są tworzone tymczasowo — tylko na czas wywołania funkcji. Gdy funkcja się kończy, PHP automatycznie je usuwa.

To dlatego lokalne zmienne są bardziej „bezpieczne” — nie zostają w pamięci dłużej, niż to potrzebne, i nie mogą przypadkiem nadpisać danych z innej części programu.

Kiedy używać zmiennych globalnych?

Zmienne globalne nie są złe z natury — trzeba tylko używać ich z umiarem.
Warto po nie sięgnąć, gdy:

  • potrzebujesz jednej wartości, dostępnej w wielu miejscach (np. konfiguracja, ustawienia aplikacji),
  • masz mały, prosty skrypt, gdzie przejrzystość nie cierpi,
  • chcesz przechować dane tymczasowe, np. licznik odwiedzin, sesję itp.

W każdym innym przypadku — lepiej używać parametrów funkcji lub klas obiektowych (OOP).

Dodatkowa ciekawostka: zmienne statyczne

Wspomnieliśmy wcześniej o zmiennych statycznych. To taki hybrydowy typ — mają zasięg lokalny, ale „pamiętają” swoją wartość między wywołaniami funkcji.

Zobacz przykład:

<?php
function licznik() {
    static $liczba = 0;
    $liczba++;
    echo "Liczba wywołań: $liczba <br>";
}

licznik(); // 1
licznik(); // 2
licznik(); // 3
?>

Zmienna $liczba zachowuje się jak lokalna, bo istnieje tylko wewnątrz funkcji, ale jej wartość nie znika po zakończeniu działania.
To idealne rozwiązanie np. do tworzenia liczników czy pamiętania stanu.

Kod w praktyce – mały projekt testowy

Na koniec zróbmy coś praktycznego.
Oto prosty skrypt PHP, który pokaże, jak współpracują zmienne lokalne i globalne w prawdziwym kodzie.

<?php
// Zmienna globalna
$saldo = 1000;

function wplac($kwota) {
    global $saldo;
    $saldo += $kwota;
    echo "Wpłacono $kwota zł. Nowe saldo: $saldo zł.<br>";
}

function wyplac($kwota) {
    global $saldo;
    if ($saldo >= $kwota) {
        $saldo -= $kwota;
        echo "Wypłacono $kwota zł. Pozostało: $saldo zł.<br>";
    } else {
        echo "Za mało środków! Saldo: $saldo zł.<br>";
    }
}

wplac(200);
wyplac(500);
wyplac(900);
?>

Wynik działania:

Wpłacono 200 zł. Nowe saldo: 1200 zł.
Wypłacono 500 zł. Pozostało: 700 zł.
Za mało środków! Saldo: 700 zł.

W tym przykładzie $saldo to zmienna globalna — jest wspólna dla wszystkich funkcji.
Działa to dobrze, ale gdybyś pisał większą aplikację bankową, lepiej byłoby przekazywać saldo do funkcji jako argument lub użyć klasy obiektowej.

Różnica między zmiennymi globalnymi a lokalnymi w PHP sprowadza się głównie do zasięgu i dostępności:

  • Zmienne lokalne istnieją tylko w funkcji i są bezpieczniejsze w użyciu.
  • Zmienne globalne istnieją w całym skrypcie, ale nie są automatycznie dostępne w funkcjach — trzeba je zadeklarować przez global lub $GLOBALS.
  • Nadużywanie globalnych zmiennych może prowadzić do chaosu — lepiej przekazywać dane jako parametry lub używać obiektów.

Jeśli zapamiętasz te zasady, Twój kod stanie się czytelniejszy, bezpieczniejszy i łatwiejszy w utrzymaniu.

Szukasz taniego i dobrego hostingu dla swojej strony www? - Sprawdź Seohost.pl