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