php-const-vs-define

Разберемся, в чем разница в объявлении констант в PHP при использовании ключевого слова const и с использованием функции define()

Синтаксис для объявления, дающий одинаковый результат:

Поведение в PHP до версии 5.3

Вы можете определить константу только с помощью функции define(). До PHP 5.6 константы могут содержать только скалярные данные (boolean, integer, float и string типов).

Поведение в PHP, начиная с версии 5.3

Для объявления констант подходят оба способа. После того, как константа определена, ее значение не может быть изменено или аннулировано.

Начиная с PHP 5.6

С PHP 5.6 возможно также определять константы как скалярные выражения, и также можно определять константы с типом array. Можно определять константы с типом resource, но не рекомендуется, так как может привести к неожиданным результатам.

Поддержка массивов:

Разница между define() и const

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

const всегда регистрозависимо, в то время как define() позволяет сделать регистронезависимые константы:

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

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

Объявляются только с помощью const. Постоянные класса всегда общедоступны. Они не могут быть private или protected.

Объявленная константа принадлежит именно классу, она не принадлежит ни одному объекту и является общей на все объекты (экземпляры) класса.