Синтаксис

Константу определяют через ключевое слово const или функцией define(). Функция define() разрешает определить константу для произвольного выражения, тогда как у конструкции const есть ограничения, которые описывает следующий параграф. После определения константу нельзя изменить или сделать неопределённой.

При определении константы через ключевое слово const допускаются только скалярные выражения (bool, int, float и string) и массивы (array), которые содержат только скалярные выражения. Разрешается определять константы с типом resource, но не рекомендуется, поскольку это приводит к неожиданным результатам.

Значение константы получают по имени константы. Не нужно указывать перед именем константы символ $, как перед переменными. Значение константы также получают функцией constant(), если имя константы формируется динамически. Список всех определённых констант получают функцией get_defined_constants().

Замечание: Константы и (глобальные) переменные находятся в разных пространствах имён. Это означает, например, что логическая константа true и переменная $TRUE — не одно и то же.

При попытке обратиться к неопределённой константе выбрасывается исключение Error До PHP 8.0.0 неопределённые константы интерпретировались как простое строковое (string) слово, то есть CONSTANT сравнивалось с "CONSTANT". Этот резервный вариант объявили устаревшим в PHP 7.2.0, при этом будет сгенерирована ошибка уровня E_WARNING. До PHP 7.2.0 вместо этого выдавалась ошибка уровня E_NOTICE. Смотрите также главу руководства, которая разъясняет, почему $foo[bar] — это неправильно (если только bar не константа). Это не относится к полным и абсолютным константам, которые каждый раз будут выбрасывать исключение Error, если эти константы не определили.

Замечание: Чтобы проверить, установили ли константу, вызывают функцию defined().

Отличия констант от переменных:

  • У констант нет приставки в виде знака доллара $;
  • Константы разрешается определять и получать доступ к ним в любом месте без учёта области видимости;
  • Константы нельзя переопределять или удалять после первоначального объявления;
  • Константам разрешено содержать только скалярные значения или массивы.

Пример #1 Определение констант

<?php

define
("CONSTANT", "Здравствуй, мир.");
echo
CONSTANT; // Выводит "Здравствуй, мир."
echo Constant; // Выбросит ошибку: Неопределённая константа Constant
// До PHP 8.0.0 выводит "Constant" и выдаёт предупреждение.

?>

Пример #2 Определение констант через ключевое слово const

<?php

// Простое скалярное значение
const CONSTANT = 'Здравствуй, мир.';

echo
CONSTANT;

// Скалярное выражение
const ANOTHER_CONST = CONSTANT . ' Прощай, мир.';
echo
ANOTHER_CONST;

const
ANIMALS = array('dog', 'cat', 'bird');
echo
ANIMALS[1]; // выводит "cat"

// Массивы в константе
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo
ANIMALS[1]; // выводит "cat"

?>

Замечание:

В отличие от определения констант функцией define(), константы, которые объявили через ключевое слово const, требуется объявлять в самой верхней области видимости, потому что константы определяются при компилировании скрипта. Поэтому константы нельзя объявлять внутри функций, циклов, инструкций if и блоков try и catch.

Смотрите также

add a note add a note

User Contributed Notes 4 notes

up
10
login at (two)view dot de
6 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
-5
halfhearted13 at gmail dot com
3 years ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
up
-8
privat at ulrich-kapp dot de
4 years ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
up
-12
mh at hanft dot de
4 years 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