Константа это имя для значения, которое не меняется, пока работает скрипт. Объявите её через const MAX_USERS = 100; или define('MAX_USERS', 100); и используйте просто имя, без $.
По соглашению имена констант пишут в UPPER_SNAKE_CASE. Константы глобальны: константа, объявленная в начале файла, видна в каждой функции без global.
define() и const
Оба способа создают константу, но срабатывают в разное время. const разрешается, когда PHP компилирует файл, а define() выполняется, как любой другой вызов функции.
const | define() | |
|---|---|---|
Внутри if, циклов, функций | Нет | Да |
| Имя собирается из переменной | Нет | Да |
| Константы класса | Да | Нет |
| Значение может быть выражением | Да, из констант и литералов | Да, любое значение |
| Автоматически попадает в пространство имён | Да | Нет (указывайте полное имя) |
По умолчанию используйте const: он короче и проверяется при компиляции. define() берите, когда константа зависит от условия или от вычисляемого имени.
Константы нельзя изменить
Присваивание константе это ошибка разбора:
<?php
const LIMIT = 10;
LIMIT = 20;
PHP Parse error: syntax error, unexpected token "=" in /home/index.php on line 3
Повторное определение той же константы не ошибка, но PHP печатает предупреждение и оставляет первое значение:
<?php
define("LIMIT", 10);
define("LIMIT", 20);
echo LIMIT; // 10
Warning: Constant LIMIT already defined in /home/index.php on line 3
Если значение может быть уже задано (например, в файле настроек, который подключается больше одного раза), сначала проверьте через defined():
Константы-массивы
Константа может хранить массив. Его можно читать через NAME[key], обходить в цикле и передавать дальше, но не изменять.
Константы класса
Внутри класса const объявляет константу, которая принадлежит классу. Снаружи она читается как ClassName::NAME, а изнутри как self::NAME или static::NAME. У констант класса может быть область видимости, они могут быть final, а начиная с PHP 8.3 могут объявлять тип.
Группу связанных констант класса вроде STATUS_NEW и STATUS_PAID часто лучше записать как enum: он к тому же не даёт передавать недопустимые значения.
Магические константы: LINE, FILE, DIR и другие
Значение магических констант зависит от того, где они стоят. Оно подставляется при компиляции.
Чаще всего используют __DIR__, каталог текущего файла. Пути для подключения, собранные от него, работают независимо от того, из какого каталога запущен скрипт: require __DIR__ . '/config.php';. Полный шаблон смотрите в include и require.
Встроенные константы, которые стоит знать
В PHP много собственных констант. Эти встречаются постоянно:
PHP_EOL это окончание строки той системы, на которой работает PHP ("\n" в Linux и macOS, "\r\n" в Windows). Он предназначен для текста, который пишется в файлы и терминал; в HTML-выводе перенос строки не виден, поэтому там используйте <br>.
Часто задаваемые вопросы
Чем define() отличается от const в PHP?
const это языковая конструкция, которая разрешается при компиляции файла: она работает на верхнем уровне и внутри классов, но не внутри if, циклов или функций. define() это функция, вызываемая во время выполнения, поэтому работает где угодно, и имя можно собрать из переменной, но константы класса через неё объявить нельзя.
Может ли константа PHP быть массивом?
Да. Работают и const COLORS = ['red', 'green'];, и define('COLORS', ['red', 'green']);, а элемент читается как COLORS[0]. Изменить массив после этого нельзя.
Как проверить, определена ли константа в PHP?
Используйте defined('NAME'): функция принимает имя строкой и возвращает true или false. Частый шаблон: if (!defined('APP_ENV')) { define('APP_ENV', 'production'); }. Для констант класса передавайте 'ClassName::NAME'.
Что такое магические константы в PHP?
Константы, значение которых зависит от места, где они написаны: __LINE__ (текущая строка), __FILE__ (полный путь к файлу), __DIR__ (его каталог), __FUNCTION__, __CLASS__, __METHOD__ и __NAMESPACE__. Они пишутся с двумя подчёркиваниями с каждой стороны и не чувствительны к регистру.