W3docs

define()

Как PHP define() создаёт константы, чем отличается от const, какие значения принимает и о чём нужно знать.

Что делает функция define()

Функция define() создаёт константу — именованное значение, которое нельзя изменить после задания. В отличие от переменной, константа не имеет префикса $, является глобальной для всего скрипта (в том числе внутри функций), а попытка переопределить её вызывает предупреждение вместо того, чтобы молча перезаписать значение.

Используйте define(), когда нужен единственный источник истины для значения, которое никогда не должно меняться в процессе выполнения: флаг конфигурации, номер версии, путь к файлу или конечная точка API.

Синтаксис

define(string $name, mixed $value, bool $case_insensitive = false): bool
  • $name — имя константы. По соглашению используются прописные буквы с подчёркиванием (MAX_USERS), но подойдёт любой допустимый идентификатор.
  • $value — сохраняемое значение. Скалярные типы (int, float, string, bool) и null поддерживались всегда; array стал допустимым значением в PHP 7.0.
  • $case_insensitive (необязательный) — исторически передача true позволяла обращаться к константе в любом регистре. Этот флаг устарел начиная с PHP 7.3 и удалён в PHP 8.0, поэтому его следует опускать, а имена констант считать чувствительными к регистру.

define() возвращает true при успехе и false при ошибке.

Базовый пример

php— editable, runs on the server

Здесь define() создаёт константу с именем GREETING, хранящую Hello, world!, а затем echo выводит её по имени — без $ и без кавычек.

Хранение array в константе

Начиная с PHP 7.0 константа может хранить array, что удобно для фиксированных таблиц поиска или списков параметров:

<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>

Проверка перед использованием константы

Обращение к неопределённой константе является ошибкой в PHP 8.0+. Используйте defined() в качестве защиты, чтобы код корректно завершался при её отсутствии:

<?php
if (!defined("APP_ENV")) {
    define("APP_ENV", "production");
}
echo APP_ENV; // production
?>

define() и const

PHP предоставляет два способа объявления константы, и они не взаимозаменяемы:

Возможностьdefine()const
Момент выполненияВо время выполненияВо время компиляции
Условное использование / в циклеДа — можно размещать внутри if/forНет — должна быть на верхнем уровне или в классе
Динамическое имяДа — имя может быть переменнойНет — имя фиксировано
Константы классаНетДа

Выбирайте define(), когда имя или значение вычисляется, либо когда объявление должно быть условным. Используйте const для простых, всегда объявляемых констант и констант класса.

Типичные ошибки

  • Без $ и без кавычек при чтении. Пишите echo GREETING;, а не echo $GREETING; или echo "GREETING";.
  • Переопределение вызывает предупреждение, но не перезаписывает. Повторный вызов define("GREETING", ...) выдаёт предупреждение, а исходное значение сохраняется.
  • Имена чувствительны к регистру. GREETING и Greeting — две разные константы с тех пор, как флаг нечувствительности к регистру был удалён.
  • Объявляйте один раз, в начале. Поскольку константы глобальны и постоянны, задавайте их в начале скрипта или в файле конфигурации.

Заключение

define() — это способ создать глобальное неизменяемое значение в PHP во время выполнения. Используйте его вместе с defined(), чтобы избежать предупреждений о переопределении, предпочитайте const для фиксированных констант времени компиляции и констант класса, а общую картину смотрите в разделе PHP Constants.

Практика

Практика
Как в PHP используется функция 'define'?
Как в PHP используется функция 'define'?
Was this page helpful?