Синтаксис
Константу определяют через ключевое слово 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
.