Как объявить константу в PHP? Чем отличается define() от const?php-5

В PHP существует два основных способа объявления констант, каждый со своими особенностями.

1. Использование define

define('CONSTANT_NAME', 'value', $case_insensitive = false);

Характеристики:

  • Работает на протяжении всего выполнения скрипта
  • Может использоваться в условных блоках и функциях
  • Третий параметр (необязательный) делает имя константы case-insensitive
  • Значение может быть только скалярным (string, int, float, bool) или null
  • До PHP 7.0 нельзя было использовать массивы

Пример:

define('SITE_NAME', 'My Website');
define('MAX_USERS', 100);
define('DEBUG_MODE', true);

2. Использование const

const CONSTANT_NAME = 'value';

Характеристики:

  • Должна объявляться в верхней области видимости (не в условных блоках)
  • Имена всегда case-sensitive
  • Синтаксически чище и выглядит как объявление переменной
  • Начиная с PHP 5.6 можно использовать массивы (через const)
  • Начиная с PHP 7.0 поддерживаются выражения в значениях

Пример:

const DB_HOST = 'localhost';
const VERSION = '1.0.0';
const SETTINGS = ['theme' => 'dark'];

Ключевые различия

Критерий define() const
Область видимости Глобальная Только верхний уровень
Case-sensitive Опционально (3-й параметр) Всегда
Массивы Только PHP 7.0+ PHP 5.6+
Условное объявление Да Нет
Производительность Чуть медленнее Чуть быстрее
Выражения в значении Всегда разрешены Только PHP 7.0+

Когда что использовать

define() лучше когда:

  • Нужно объявить константу внутри функции/условия
  • Требуется case-insensitive константа
  • Работаете с версией PHP ниже 5.6

const лучше когда:

  • Работаете в классе (для классовых констант)
  • Нужно объявить константу массива (PHP 5.6+)
  • Хотите более чистый синтаксис

Особенности классовых констант

class Config {
    const VERSION = '1.0';
    public static function getVersion() {
        return self::VERSION;
    }
}
  • Видимость можно указать (public, protected, private)
  • Доступ через self:: или имя класса

Современные практики

  1. Использование const с выражениями:
const MAX_SIZE = 1024 * 1024;
  1. Массивы в константах:
const SETTINGS = [
    'debug' => true,
    'log_level' => 'error'
];

Резюмируем:

оба способа объявления констант имеют свои применения. define() более гибкая, но const предлагает более чистый синтаксис и лучшую производительность. В современном PHP (7.0+) предпочтение обычно отдается const, кроме случаев когда требуется условное объявление или case-insensitive имена.