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.
| Nazwa | Poprawna? |
|---|---|
$total, $userName, $user_name | tak |
$_count, $item2 | tak |
$2items | nie, nie może zaczynać się od cyfry |
$user-name | nie, to $user minus name |
$this | nie, 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.