## Синтаксис

Константу определяют через ключевое слово `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 . "\n";

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

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

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

> Замечание:

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

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

- Константы классов

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open