Zakres zmiennych: lokalny i globalny
Poznanie izolowania zakresu funkcji w PHP oraz używania słowa kluczowego global.
Zakres zmiennych: lokalny i globalny to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Zakres zmiennych w PHP
W PHP każda zmienna ma zakres — obszar kodu, w którym jest dostępna.
- Zmienne utworzone poza funkcjami znajdują się w zakresie globalnym
- Zmienne utworzone wewnątrz funkcji znajdują się w zakresie lokalnym
- PHP NIE ma zakresu blokowego, w przeciwieństwie do C lub JavaScript
Zakres lokalny
Zmienne wewnątrz funkcji są lokalne — przestają istnieć po zakończeniu działania funkcji:
<?php
function compute(): void {
$result = 42; // local variable
echo $result; // 42
}
compute();
echo $result ?? 'undefined'; // undefined — $result is goneZmienne globalne NIE są widoczne automatycznie
W przeciwieństwie do wielu języków funkcje PHP nie widzą domyślnie zmiennych globalnych — trzeba je jawnie zaimportować:
<?php
$message = 'Hello';
function printMessage(): void {
echo $message ?? 'not visible'; // 'not visible'
// $message from global scope is not accessible here
}Słowo kluczowe global
Użyj global $varName wewnątrz funkcji, aby uzyskać dostęp do zmiennej globalnej:
<?php
$counter = 0;
function increment(): void {
global $counter;
$counter++;
}
increment();
increment();
echo $counter; // 2Superglobalna zmienna $GLOBALS
$GLOBALS to tablica zawierająca wszystkie zmienne globalne — dostępna w dowolnym miejscu bez użycia słowa kluczowego global:
<?php
$total = 100;
function addTax(): void {
$GLOBALS['total'] *= 1.18; // 18% tax
}
addTax();
echo $total; // 118Dlaczego unikać global
Nadmierne używanie global tworzy ukryte zależności — funkcje stają się trudne do testowania i debugowania. Lepiej przekazywać wartości jako argumenty:
<?php
// Bad
$db = new PDO(/* ... */);
function getUsers(): array {
global $db;
return $db->query('SELECT * FROM users')->fetchAll();
}
// Good
function getUsers(PDO $db): array {
return $db->query('SELECT * FROM users')->fetchAll();
}Zmienne statyczne
Zmienna static zachowuje swoją wartość między wywołaniami funkcji, ale nadal pozostaje lokalna dla tej funkcji:
<?php
function callCount(): int {
static $count = 0;
return ++$count;
}
echo callCount(); // 1
echo callCount(); // 2
echo callCount(); // 3Domknięcia i przechwytywanie zmiennych
Domknięcia (funkcje anonimowe) mogą przechwytywać zmienne z zewnętrznego zakresu za pomocą use:
<?php
$prefix = 'Mr';
$greet = function(string $name) use ($prefix): string {
return "$prefix. $name";
};
echo $greet('Smith'); // Mr. SmithPrzechwytywanie przez referencję
Przechwytuj przez referencję za pomocą use (&$var), aby domknięcie mogło modyfikować zmienną zewnętrzną:
<?php
$total = 0;
$add = function(int $n) use (&$total): void {
$total += $n;
};
$add(10);
$add(5);
echo $total; // 15Funkcje strzałkowe
Funkcje strzałkowe PHP 7.4 (fn =>) automatycznie przechwytują zewnętrzny zakres przez wartość — nie wymagają use:
<?php
$multiplier = 3;
$nums = [1, 2, 3, 4];
$result = array_map(fn($n) => $n * $multiplier, $nums);
print_r($result); // [3, 6, 9, 12]Funkcje zagnieżdżone
PHP pozwala definiować funkcję wewnątrz innej funkcji, ale funkcja wewnętrzna staje się globalnie dostępna po wywołaniu funkcji zewnętrznej:
<?php
function outer(): void {
function inner(): void {
echo 'inner called';
}
}
// inner(); // Fatal: undefined before outer() is called
outer();
inner(); // works nowSzybki test
Co robi zmienna static wewnątrz funkcji PHP?
Podsumowanie: zakres zmiennych
Najważniejsze zasady dotyczące zakresów w PHP:
- Funkcje mają własny zakres lokalny
- Zmienne globalne trzeba zaimportować za pomocą
global - Alternatywnie można użyć
$GLOBALS['name'] - Zmienne
staticzachowują wartości między wywołaniami w obrębie funkcji - Domknięcia przechwytują zmienne zewnętrzne za pomocą
use - Funkcje strzałkowe automatycznie przechwytują zmienne przez wartość
Często zadawane pytania
Czy lekcja „Zakres zmiennych: lokalny i globalny” jest bezpłatna?
Tak — pełny tekst „Zakres zmiennych: lokalny i globalny” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zakres zmiennych: lokalny i globalny”?
Poznanie izolowania zakresu funkcji w PHP oraz używania słowa kluczowego global. Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Zakres zmiennych: lokalny i globalny”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Definiowanie i wywoływanie funkcji
- Parametry domyślne i wariadyczne
- Zakres zmiennych: lokalny i globalny
- Funkcje anonimowe i domknięcia