Stała to nazwa wartości, która nie zmienia się podczas działania skryptu. Zadeklaruj ją przez const MAX_USERS = 100; albo define('MAX_USERS', 100);, a potem używaj samej nazwy, bez $.
Zgodnie z konwencją nazwy stałych zapisuje się jako UPPER_SNAKE_CASE. Stałe są globalne: stała zadeklarowana na początku pliku jest widoczna w każdej funkcji bez global.
define() vs const
Oba tworzą stałą, ale działają w różnym czasie. const jest rozwiązywane, gdy PHP kompiluje plik, a define() wykonuje się jak każde inne wywołanie funkcji.
const | define() | |
|---|---|---|
W if, pętlach, funkcjach | Nie | Tak |
| Nazwa zbudowana ze zmiennej | Nie | Tak |
| Stałe klas | Tak | Nie |
| Wartość może być wyrażeniem | Tak, ze stałych i literałów | Tak, dowolna wartość |
| Automatycznie w przestrzeni nazw | Tak | Nie (podaj pełną nazwę) |
Domyślnie używaj const, bo jest krótsze i sprawdzane przy kompilacji. Używaj define(), gdy stała zależy od warunku albo wyliczonej nazwy.
Stałych nie można zmienić
Przypisanie do stałej to błąd parsowania:
<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error: syntax error, unexpected token "=" in /home/index.php on line 3
Dwukrotne zdefiniowanie tej samej stałej nie jest błędem, ale PHP wypisuje ostrzeżenie i zachowuje pierwszą wartość:
<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3
Gdy wartość może już być ustawiona (na przykład w pliku konfiguracyjnym ładowanym więcej niż raz), sprawdź najpierw przez defined():
Stałe tablicowe
Stała może przechowywać tablicę. Możesz ją czytać przez NAME[key], iterować po niej i przekazywać dalej, ale nie możesz jej zmieniać.
Stałe klas
W klasie const deklaruje stałą, która należy do klasy. Z zewnątrz czytasz ją przez ClassName::NAME, a od środka przez self::NAME albo static::NAME. Stałe klas mogą mieć widoczność, mogą być final, a od PHP 8.3 mogą deklarować typ.
Grupę powiązanych stałych klasy, jak STATUS_NEW i STATUS_PAID, często lepiej zapisać jako enum, który przy okazji nie pozwala przekazywać niepoprawnych wartości.
Stałe magiczne: LINE, FILE, DIR i inne
Stałe magiczne zmieniają wartość w zależności od miejsca, w którym się pojawiają. Są wypełniane przy kompilacji.
Najczęściej używana jest __DIR__, czyli katalog bieżącego pliku. Ścieżki do dołączanych plików zbudowane na jej podstawie działają niezależnie od katalogu, z którego uruchomiono skrypt: require __DIR__ . '/config.php';. Pełny wzorzec opisuje strona o include i require.
Wbudowane stałe, które warto znać
PHP definiuje wiele własnych stałych. Te pojawiają się cały czas:
PHP_EOL to znak końca linii systemu, na którym działa PHP ("\n" na Linuksie i macOS, "\r\n" na Windowsie). Służy do tekstu zapisywanego do plików i terminala; w wyjściu HTML znak nowej linii nie jest widoczny, więc tam użyj <br>.
Najczęściej zadawane pytania
Czym różni się define() od const w PHP?
const to konstrukcja językowa rozwiązywana przy kompilacji pliku: działa na najwyższym poziomie i w klasach, ale nie w if, pętlach ani funkcjach. define() to funkcja wywoływana w czasie działania, więc działa wszędzie, a nazwę można zbudować ze zmiennej, ale nie da się nią zadeklarować stałych klasy.
Czy stała w PHP może być tablicą?
Tak. Działają zarówno const COLORS = ['red', 'green'];, jak i define('COLORS', ['red', 'green']);, a element odczytasz przez COLORS[0]. Tablicy nie można potem zmienić.
Jak sprawdzić, czy stała jest zdefiniowana w PHP?
Użyj defined('NAME'), które przyjmuje nazwę jako łańcuch i zwraca true albo false. Typowy wzorzec to if (!defined('APP_ENV')) { define('APP_ENV', 'production'); }. Dla stałych klas przekaż 'ClassName::NAME'.
Co to są stałe magiczne w PHP?
Stałe, których wartość zależy od miejsca, w którym są zapisane: __LINE__ (bieżąca linia), __FILE__ (pełna ścieżka pliku), __DIR__ (jego katalog), __FUNCTION__, __CLASS__, __METHOD__ i __NAMESPACE__. Zapisuje się je z dwoma podkreślnikami z każdej strony i nie rozróżniają wielkości liter.