Menu

Zmienne w PHP: deklaracja, zasięg, global i static

Zmienna PHP zaczyna się od $ i powstaje przez przypisanie: $name = "Ada";. Nie ma słowa kluczowego deklaracji ani stałego typu. Funkcje nie widzą zmiennych z zewnątrz, chyba że je przekażesz, użyjesz global albo je przechwycisz; static zachowuje wartość między wywołaniami.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Zmienna PHP to nazwa zaczynająca się od $, a tworzysz ją przez przypisanie wartości: $name = "Ada";. Nie ma słowa kluczowego deklaracji ani typu do podania, bo typ wynika z wartości. Później możesz przypisać wartość innego typu.

Zasady nazywania zmiennych

Nazwa zmiennej zaczyna się od $, potem litery lub podkreślnika, a dalej dowolnych liter, cyfr lub podkreślników. Litery spoza ASCII też się liczą, więc $名前 jest poprawne, choć normą są nazwy ASCII. Wielkość liter ma znaczenie.

NazwaPoprawna?
$total, $userName, $user_nametak
$_count, $item2tak
$2itemsnie, nie może zaczynać się od cyfry
$user-namenie, to $user minus name
$thisnie, zarezerwowane dla bieżącego obiektu; przypisanie to błąd krytyczny

Zatem $city, $City i $CITY to trzy różne zmienne. Używaj snake_case ($first_name) albo camelCase ($firstName) i trzymaj się jednego stylu w projekcie. Standardy PSR celowo nie narzucają nazewnictwa zmiennych; kod w Laravelu i Symfony zwykle używa camelCase.

Zmienne w łańcuchach

W podwójnych cudzysłowach PHP zastępuje zmienne ich wartościami; w pojedynczych nie. Obejmij zmienną nawiasami klamrowymi, gdy zaraz po niej są litery albo gdy odwołujesz się do elementu tablicy przez klucz tekstowy:

Strona o łańcuchach szczegółowo opisuje cudzysłowy, łączenie i interpolację.

Niezdefiniowane zmienne i wartości domyślne

Odczyt zmiennej, której nigdy nie przypisano, daje null, a Twoje PHP wypisze ostrzeżenie:

Warning: Undefined variable $discount in /home/index.php on line 3

Sprawdź ją najpierw przez isset albo użyj operatora ??, aby podać wartość domyślną. Oba sposoby działają bez ostrzeżenia:

$x ??= 0; to skrót od $x = $x ?? 0;. Typowy przypadek to wartości z formularza i URL: $page = $_GET['page'] ?? 1;.

Zasięg zmiennych w funkcjach

Zmienne zdefiniowane poza funkcją nie są w niej widoczne, a zmienne utworzone w funkcji znikają, gdy ta zwróci wynik. To najczęstsze zaskoczenie dla osób przychodzących z JavaScriptu:

Bez ?? 0 pierwsza funkcja ostrzegłaby o niezdefiniowanym $taxRate. Przekazywanie wartości jako parametrów sprawia, że funkcje są przewidywalne i łatwe do testowania, i po to należy sięgać w pierwszej kolejności. Strona o funkcjach opisuje parametry i zwracane wartości.

Słowo global i $GLOBALS

Gdy funkcja naprawdę musi użyć zmiennej globalnej, zadeklaruj ją przez global albo sięgnij do tablicy $GLOBALS, która przechowuje każdą zmienną globalną pod jej nazwą:

Zmienne globalne utrudniają śledzenie kodu, bo każda funkcja może je zmienić. Spotkasz je w starszym kodzie i wtyczkach WordPressa (global $wpdb;); w nowym kodzie przekazuj wartości albo użyj klasy.

Zmienne statyczne zachowują wartość

Zmienna static w funkcji powstaje raz i zachowuje wartość między wywołaniami. Nadal jest lokalna: kod poza funkcją jej nie widzi.

Zmienne zmiennych ($$name)

$$name używa wartości $name jako nazwy innej zmiennej. To działa, ale tablice prawie zawsze robią to samo czytelniej:

<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

Kopia czy referencja

Przypisanie jednej zmiennej do drugiej kopiuje wartość, także tablice. Dodaj & z przodu, aby obie nazwy wskazywały tę samą wartość:

Obiekty zachowują się inaczej: przypisanie obiektu kopiuje uchwyt do tego samego obiektu, więc zmiany przez dowolną zmienną widać przez obie. Do prawdziwej kopii użyj clone.

Częsty błąd: zmienna ustawiana w if lub w pętli

PHP nie ma zasięgu blokowego, więc zmienna utworzona w if, for albo foreach istnieje także po nim. To pomaga, ale ukrywa błąd: gdy blok się nie wykona, zmienna nigdy nie powstanie.

Bez linii z wartością domyślną puste $orders zostawiłoby $message niezdefiniowane i wypisało ostrzeżenie. Nadaj każdej zmiennej wartość przed blokiem, który może ją ustawić.

Najczęściej zadawane pytania

Jak zadeklarować zmienną w PHP?

Przypisz wartość do nazwy zaczynającej się od $: $count = 10;. PHP nie ma słowa kluczowego var ani let i nie podaje typu w deklaracji; zmienna powstaje przy pierwszym przypisaniu i przyjmuje typ swojej wartości.

Dlaczego moja funkcja nie widzi zmiennej zdefiniowanej poza nią?

Funkcje w PHP mają własny zasięg lokalny i nie widzą automatycznie zmiennych globalnych. Przekaż wartość jako parametr (najczystsza opcja), zadeklaruj global $name; w funkcji albo odczytaj $GLOBALS['name']. Domknięcia mogą ją przechwycić przez use ($name), a funkcje strzałkowe fn() przechwytują ją automatycznie.

Co to jest zmienna statyczna w PHP?

Zmienna lokalna zadeklarowana w funkcji ze słowem static, na przykład static $calls = 0;. Inicjalizuje się raz i zachowuje wartość między wywołaniami tej funkcji, co przydaje się do liczników i prostych cache.

Czy w nazwach zmiennych PHP ma znaczenie wielkość liter?

Tak. $name, $Name i $NAME to trzy różne zmienne. Natomiast nazwy funkcji i klas w PHP nie rozróżniają wielkości liter.

Jak usunąć zmienną w PHP?

Wywołaj unset($name);. Potem isset($name) zwraca false, a odczyt daje ostrzeżenie „Undefined variable”. Przypisanie null zostawia zmienną, ale ją opróżnia.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ