Stałe — const i define

🎯 Po tej lekcji zdefiniujesz własne stałe i będziesz wiedzieć, kiedy użyć stałej zamiast zmiennej.

W każdym sklepie jest kilka wartości, które nigdy się nie zmieniają: stawka VAT, nazwa firmy, maksymalna liczba produktów na stronie. Można je wpisywać ręcznie w każdym miejscu kodu — ale to proszenie się o kłopoty. Wystarczy, że zmienisz stawkę VAT, a musisz przeszukać cały projekt. Stała rozwiązuje ten problem.

Czym jest stała?

Stała to nazwana wartość, która — w odróżnieniu od zmiennej — nie może być zmieniona po zdefiniowaniu. Jeśli spróbujesz ją nadpisać, PHP zgłosi błąd.

<?php
declare(strict_types=1);

const STAWKA_VAT = 0.23;

echo STAWKA_VAT; // wynik: 0.23

// STAWKA_VAT = 0.08; // PHP Error: Cannot redefine constant

Zwróć uwagę: stała nie ma znaku $. Używasz po prostu jej nazwy.

Konwencja nazewnictwa

Przyjęta konwencja (i standard PSR) nakazuje pisać stałe WIELKIMI_LITERAMI z podkreślnikami. Dzięki temu od razu widać, że to stała, a nie zmienna:

<?php
declare(strict_types=1);

const MAX_ROZMIAR_PLIKU     = 5242880;  // 5 MB w bajtach
const DOZWOLONE_ROZSZERZENIA = ['jpg', 'png', 'gif'];
const WERSJA_APLIKACJI      = '2.1.0';
const TRYB_DEBUG            = false;

Definicja przez const

const to słowo kluczowe — podobne do function czy class. Używaj go na poziomie globalnym lub wewnątrz klas:

<?php
declare(strict_types=1);

const STAWKA_VAT    = 0.23;
const NAZWA_SERWISU = 'phpedia.pl';
const LIMIT_WYNIKOW = 20;

// Używasz stałej tak samo jak zmiennej, tylko bez $
$cenaNetto  = 100.0;
$cenaBrutto = $cenaNetto * (1 + STAWKA_VAT);

echo "Cena brutto: $cenaBrutto PLN"; // wynik: Cena brutto: 123 PLN

Definicja przez define()

define() to funkcja, która działa w czasie wykonania skryptu (runtime). Możesz jej użyć wewnątrz bloku if lub funkcji — coś, czego const nie pozwala:

<?php
declare(strict_types=1);

$srodowisko = 'produkcja';

if ($srodowisko === 'developerskie') {
    define('TRYB_DEBUG', true);
} else {
    define('TRYB_DEBUG', false);
}

var_dump(TRYB_DEBUG); // wynik: bool(false)
💡 Kiedy co? W nowoczesnym PHP preferuj const — jest czytelniejszy i szybszy. Sięgaj po define() tylko wtedy, gdy wartość stałej zależy od warunków wykonania skryptu.

Stałe wbudowane w PHP

PHP sam definiuje wiele przydatnych stałych:

<?php
declare(strict_types=1);

echo PHP_VERSION;      // wynik: 8.3.x  — wersja PHP
echo PHP_INT_MAX;      // wynik: 9223372036854775807 — maks. int
echo PHP_EOL;          // wynik: \n (Linux/Mac) lub \r\n (Windows) — znak nowej linii
echo PHP_MAJOR_VERSION; // wynik: 8
echo DIRECTORY_SEPARATOR; // wynik: / (Linux/Mac) lub \ (Windows) — separator ścieżek

Szczególnie przydatne jest PHP_EOL w skryptach konsolowych i DIRECTORY_SEPARATOR przy operacjach na plikach — zapewniają przenośność między systemami.

Porównanie: stała vs zmienna

| | Zmienna $cena | Stała CENA_MIN | |---|---|---| | Znak $ | Tak | Nie | | Można nadpisać | Tak | Nie | | Konwencja | camelCase | WIELKIE_LITERY | | Zasięg | Lokalny (funkcja) lub globalny | Globalny (wszędzie) | | Kiedy używać | Wartości zmieniające się w czasie | Wartości stałe w całym projekcie |

<?php
declare(strict_types=1);

// Stałe — konfiguracja aplikacji
const STAWKA_VAT           = 0.23;
const MAX_PRODUKTOW_NA_STRONIE = 12;
const WALUTA               = 'PLN';

// Zmienne — dane konkretnego produktu
$cena     = 49.99;
$sztuki   = 3;
$suma     = $cena * $sztuki;
$sumaBrutto = round($suma * (1 + STAWKA_VAT), 2);

echo "Do zapłaty: $sumaBrutto " . WALUTA;
// wynik: Do zapłaty: 184.46 PLN

Sprawdź się

Czym różni się stała od zmiennej?

Która konwencja jest przyjęta dla nazw stałych w PHP?

Jak odwołujesz się do stałej w kodzie?

Ćwiczenie

Zdefiniuj stałe dla sklepu: NAZWA_SKLEPU (string), STAWKA_VAT (float 0.23) i MAX_PRODUKTOW_NA_STRONIE (int 12). Wyświetl zdanie: 'Sklep [nazwa] pokazuje maksymalnie [max] produktów. Ceny zawierają VAT [vat*100]%.'

Pokaż rozwiązanie
<?php
declare(strict_types=1);

const NAZWA_SKLEPU          = 'Sklep Oli';
const STAWKA_VAT            = 0.23;
const MAX_PRODUKTOW_NA_STRONIE = 12;

$vatProc = (int) (STAWKA_VAT * 100);

echo NAZWA_SKLEPU . ' pokazuje maksymalnie ' . MAX_PRODUKTOW_NA_STRONIE
    . ' produktów. Ceny zawierają VAT ' . $vatProc . '%.';
// wynik: Sklep Oli pokazuje maksymalnie 12 produktów. Ceny zawierają VAT 23%.