Składnia

Możesz zdefiniować stałą, używając funkcji define() lub słowa kluczowego const poza klasą, od PHP 5.3.0. Podczas gdy define() pozwala zdefiniować wyrażenie będące stałą, słowo kluczowe const ma ograniczenia wymienione w następnym akapicie. Raz zdefiniowana stała nie może zostać zmieniona ani usunięta.

Do wersji PHP 5.6 stałe zadeklarowane przy użyciu const mogą zawierać jedynie dane skalarne (boolean, integer, float oraz string). Począwszy od PHP 5.6 jest możliwe zdefiniowanie stałej jako wyrażenie skalarne, jest także możliwe zdefiniowanie stałej typu array. Można także zdefiniować stałą typu resource, ale powinno się tego unikać, bo może spowodować nieoczekiwane rezultaty.

Wartość stałej otrzymujemy, używając jej nazwy. W przeciwieństwie do zmiennych, nazw stałych nie poprzedzamy znakiem $. Możesz także użyć funkcji constant() do odczytania wartości stałej, jeśli chcesz wygenerować jej nazwę dynamicznie. Aby uzyskać listę wszystkich zdefiniowanych stałych, użyj get_defined_constants().

Informacja: Stałe i zmienne globalne operują w różnych przestrzeniach nazw. Oznacza to, że na przykład TRUE i $TRUE oznaczają co innego.

Jeśli używasz niezdefiniowanej stałej, PHP traktuje to, jak gdybyś chciał użyć nazwy stałej jako wartości typu string (STAŁA a "STAŁA"). Ten mechanizm jest uznany za przestarzały od PHP 7.2.0, a dla takiego kodu zostanie wyemitowany błąd E_WARNING (wcześniej był to błąd poziomu E_NOTICE) Przeczytaj także, dlaczego $foo[bar] jest niepoprawne (jeśli nie zdefiniujesz bar jako stałej). Nie odnosi się to do (w pełni) wykwalifikowanych stałych, które spowodują błąd krytyczny, jeśli nie będą zdefiniowane. Jeśli chcesz sprawdzić czy dana stała istnieje, użyj funkcji defined().

Oto różnice pomiędzy stałymi i zmiennymi:

  • Nazwy stałych nie są poprzedzone znakiem dolara ($);
  • Przed PHP 5.3 stałe mogły zostać zdefiniowane jedynie przy użyciu funkcji define() a nie poprzez zwykłe przypisanie;
  • Stałe mogą być definiowane i używane wszędzie, niezależnie od zasięgu zmiennych;
  • Stałe nie mogą być zmieniane ani usuwane jeśli raz zostały ustawione; oraz
  • Stałe mogą zawierać jedynie wartości skalarne. Od PHP 5.6 jest możliwe zdefiniowanie stałej zawierającej tablicę przy użyciu słowa kluczowego const a od PHP 7 stałe tablicowe mogą zostać zdefiniowane także przez define() Możesz także użyć tablic w wyrażeniach skalarnych stałych (na przykład const FOO = array(1,2,3)[0];), ale końcowym wynikiem musi być wartość dozwolonego typu.

Przykład #1 Definiowanie stałych

<?php
define
("CONSTANT""Hello world.");
echo 
CONSTANT// wypisuje "Hello world."
echo Constant// wypisuje "Constant" i wywoułuje ostrzeżenie.
?>

Przykład #2 Definiowanie stałych używając const

<?php
// Działa od PHP 5.3.0
const CONSTANT 'Hello World';

echo 
CONSTANT;

// Działa od PHP 5.6.0
const ANOTHER_CONST CONSTANT.'; Goodbye World';
echo 
ANOTHER_CONST;

const 
ZWIERZETA = array('pies''kot''krowa');
echo 
ZWIERZETA[1]; // wyświetla "kot"

// Działa od PHP 7
define('ZWIERZETA', array(
    
'pies',
    
'kot',
    
'krowa'
));
echo 
ZWIERZETA[1]; // wyświetla "cat"
?>

Informacja:

W przeciwieństwie do definiowana stałych przy pomocy define(), stałe zdefiniowane przy użyciu słowa const muszą zostać zadeklarowane w zasięgu górnego poziomu, ponieważ są one definiowane w czasie kompilacji. Oznacza to, że nie mogą zostać one zadeklarowane wewnątrz funkcji, pętli, wyrażeń if lub bloków try/ catch.

Informacja:

Stałe zdefiniowane przez słoo kluczowe const są zawsze nieczułe na wielkość znaków, podczas gdy zdefiniowane przez define mogą zwracać na nią uwagę.

Zobacz także Stałe Klas.

add a note add a note

User Contributed Notes 2 notes

up
8
login at (two)view dot de
2 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
up
-1
mh at hanft dot de
11 months ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));

won't work with PHP 5.6, but

const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

will.
To Top