Константы в PHP — const и define()
В этой заметке разберемся, в чем разница в объявлении PHP констант с помощью ключевого слова const и функции define() .
Константы в PHP — это «постоянные», значения которых указывается всего один раз и затем не может быть изменено. При попытке изменить значение, оно не изменится и появится PHP заметка: «Constant already defined» (константа уже определена):
Объявлять константы в PHP можно двумя способами:
У каждого способа есть свои особенности, чтобы их понять, давайте рассмотрим все поэтапно, как и что менялось с каждой версией PHP.
- Как создавать константы
- Разница между define() и const
- Константы PHP класса
- «Волшебные» константы
Как создавать константы
PHP меньше 5.3
До 5.3 в PHP, константы можно было определять только через define() . Ключевое слово const появилось с версии 5.3.
Константы могут хранить только скаляры. Скалярные переменные — это переменные с типами integer , float , string и boolean . Типы array , object и resource не являются скалярными.
С версии PHP 5.3
Появилось ключевое слово const и теперь константу можно определять еще и с помощью него.
Однако, в const нельзя указать переменную, функцию или какое то выражение, а нужно передавать скаляр «напрямую»:
Тогда как для define() таких ограничений нет.
PHP 5.6
Стало возможным указывать в значения const примитивные PHP выражения (выражения из скаляров):
Стало возможным хранить массивы в константах:
Разница между define() и const
#1 const должны быть объявлены в верхней области
Потому что они определяются при компилировании скрипта. Это значит, что const нельзя использовать внутри функций/циклов/выражений if или try/catch блоков.
#2 const всегда регистрозависима
В то время как define() позволяет создать регистро-независимые константы:
#3 const понимает только скаляры
const нельзя передать переменные, функции, выражения, а define() можно:
С версии PHP 5.6 в const также можно указывать примитивные выражения, а не только скаляры.
#4 const может хранить массивы с версии PHP 5.6, а define с PHP 7.0
Итоги сравнения
Определять константу почти всегда лучше с помощью define() , потому что тут больше возможностей и меньше вариантов «поймать» ошибку. Исключение — это когда у вас версия PHP 5.6 и вам нужно сохранить массив в константу, тут поможет const .
#5 const зависит от пространства имен, а define нет
Если мы создаем константу в namespace, то:
- При использовании const — константа будет нахоидтся в этом прастранстве и не будет доступна вне его.
- При использовании define — константа регистрируется как глобальная и будет доступна за пределами namespace.
Теперь чтобы обратиться к этим константам за пределами пространства имен, например из другого файла, нужно писать так:
Константы PHP класса
Объявляются только с помощью const . Правила для них такие как описано выше: принимают только скаляры, не понимают PHP переменные, функции, выражения.
Объявленная константа принадлежит именно классу, она не принадлежит ни одному объекту и является общей на всех объектов (экземпляров) класса.
Постоянные класса всегда общедоступны — нет статуса private или protected . Однако с версии PHP 7.1 константам класса можно указать модификатор:
Константы для классов чем-то похожи на статические (static) свойства класса. Не углубляясь в подробности, разница в том, что константу нельзя изменить.
«Волшебные» константы
И в заключении вспомним про особые константы PHP.
В PHP есть девять волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Все «волшебные» константы разрешаются во время компиляции, в отличии от обычных констант, которые разрешаются во время исполнения. Специальные константы нечувствительны к регистру и их список приведен ниже:
Константы в PHP
Константа PHP противоположна переменной в том смысле, что после определения ее нельзя изменить.
Константы особенно полезны для определения значения, которое вы часто используете, и которое никогда не меняется. Например, вы можете определить константу INCHES_SM_METR, которая содержит количество сантиметров в метре. Поскольку эта величина, которая никогда не меняется, имеет смысл определить её как константу. И наоборот, значение, которое может измениться, например курс доллара к рублю, лучше всего определять как переменную.
Считается, что константы PHP имеют глобальную область действия. Это означает, что после того, как вы определили константу, она становится доступной из любой функции или объекта в вашем коде PHP.
Кроме того, чтобы облегчить жизнь разработчикам, PHP предоставляет ряд встроенных констант, которые доступны для использования.
Определение константы PHP
Вместо использования оператора присваивания (=) , как мы это делали при определении переменных, константы создаются с помощью функции define() . У констант также отсутствует префикс $ для имен переменных.
Функция определения принимает три аргумента:
- name — имя, которое вы хотите присвоить константе
- value — значение, которое будет сохранено в константе
- case-insensitive — определяет, является ли константа нечувствительной к регистру. По умолчанию это значение false , т.е. с учетом регистра.
Имена констант чувствительны к регистру. Хотя это не является обязательным требованием, соглашение, перенесенное из других языков программирования, предполагает, что имена констант следует использовать с символами верхнего регистра. В следующем примере демонстрируется использование функции define() для указания константы с именем, чувствительным к регистру:
Пример
Обратите внимание, что мы не указали третий параметр при определении константы т.к. его значение по умолчанию false , т.е. с учетом регистра.
Давайте создадим константу с именем без учета регистра:
Пример
Проверка существования констант
Часто бывает полезно узнать, действительно ли определена константа. Этого можно добиться с помощью функции defined() . Функция defined() принимает имя проверяемой константы в качестве аргумента и возвращает значение true или false , чтобы указать, существует ли эта константа.
Например, предположим, что мы хотим узнать, определена ли константа с именем MY_FIRST_CONSTANT. Мы можем просто вызвать функцию defined() , передавая имя, а затем протестировать результат с помощью оператора if . else (см. Условные операторы PHP для более подробной информации об использовании if . else ) :
Пример
Результат выполнения кода:
Постоянные массивы PHP
В PHP7 вы можете создать константу массива с помощью функции defined() :
Пример
Результат выполнения кода:
Глобальные константы
Константы автоматически становятся глобальными и могут использоваться во всем скрипте.
В следующем примере константа используется внутри функции не смотря на то, что она определена вне функции:
PHP
Константы
Константы используются для хранения значений, которые не должны быть изменены позже. Они также часто используются для хранения параметров конфигурации, особенно тех, которые определяют среду (dev / production).
Константы имеют такие типы, как переменные, но не все типы могут использоваться для инициализации константы. Объекты и ресурсы не могут использоваться как значения для констант вообще. Массивы могут использоваться как константы, начиная с PHP 5.6
Некоторые постоянные имена зарезервированы PHP. К ним относятся true , false , null а также многие константы, специфичные для модуля.
Константы обычно называются с использованием прописных букв.
Проверка константы
Простая проверка
Чтобы проверить, определена ли константа, используйте defined функцию. Обратите внимание, что эта функция не заботится о значении константы, она заботится только о том, существует ли константа или нет. Даже если значение константы равно null или false функция все равно вернет true .
Обратите внимание, что константа становится «видимой» в вашем коде только после строки, в которой вы ее определили:
Получение всех определенных констант
Чтобы получить все определенные константы, в том числе созданные PHP, используйте функцию get_defined_constants :
Чтобы получить только те константы, которые были определены вашим приложением, вызовите функцию в начале и в конце вашего скрипта (обычно после процесса начальной загрузки):
Иногда это полезно для отладки
Определение констант
Константы создаются с помощью инструкции const или функции define . Соглашением является использование букв UPPERCASE для постоянных имен.
Определить константу с использованием явных значений
Определить константу с использованием другой константы
если у вас есть одна константа, вы можете определить другую на основе этого:
Зарезервированные константы
Некоторые константные имена зарезервированы PHP и не могут быть переопределены. Все эти примеры потерпят неудачу:
И выдается Уведомление:
Условные определения
Если у вас есть несколько файлов, где вы можете определить одну и ту же переменную (например, вашу основную конфигурацию, а затем локальную конфигурацию), следующий синтаксис может помочь избежать конфликтов:
const vs define
define — это выражение времени выполнения, а const — время компиляции.
Таким образом, define позволяет использовать динамические значения (т. Е. Вызовы функций, переменные и т. Д.) И даже динамические имена и условное определение. Тем не менее он всегда определяет относительно корневого пространства имен.
const является статичным (как в случае допускаются только операции с другими константами, скалярами или массивами и только ограниченный набор из них, так называемые константные скалярные выражения , то есть арифметические, логические и операторы сравнения, а также разыменование массива), но они автоматически являются пространством имен с префиксом текущего активного пространства имен.
const поддерживает только другие константы и скаляры как значения, а не операции.
Константы классов
Константы могут быть определены внутри классов с использованием ключевого слова const .
Это полезно для хранения типов предметов.
Постоянные массивы
Массивы могут использоваться как простые константы и константы класса из версии PHP 5.6 и далее:
Пример константы класса
Пример простой константы
Также из версии PHP 7.0 эта функция была перенесена на функцию define для простых констант.
Использование констант
Чтобы использовать константу, просто используйте ее имя:
или если вы заранее не знаете имя константы, используйте constant функцию:
Руководство по константам в PHP
Константа — это имя или идентификатор с фиксированным значением. Константы похожи на переменные, за исключением того, что после того, как они определены, они не могут быть переопределены или изменены (кроме магических констант).
Константы очень полезны для хранения данных, которые не меняются во время работы скрипта. Общие примеры таких данных включают параметры конфигурации, такие как имя пользователя и пароль базы данных, базовый URL-адрес веб-сайта, название компании и т. д.
Константы определяются с помощью PHP-функции define() , которая принимает два аргумента: имя константы и ее значение. После определения значения константы можно получить доступ в любое время, просто сославшись на ее имя. Вот простой пример:
PHP-оператор echo часто используется для отображения или вывода данных в веб-браузер. Мы узнаем больше об этом в следующей главе.
Сохраняя значение в константе вместо переменной, вы можете быть уверены, что значение не изменится случайно при запуске вашего приложения.
Правила именования PHP-констант
Имя констант должно соответствовать тем же правилам, что и имена переменных; это означает, что допустимое имя константы должно начинаться с буквы или символа подчеркивания, за которым следует любое количество букв, цифр или подчеркиваний с одним исключением: префикс $ не требуется для имен констант.
По соглашению имена констант обычно пишутся заглавными буквами. Это сделано для их простой идентификации и отличия от переменных в исходном коде.
alt=»etxt banner 728×90″ /> alt=»etxt banner 120×600″ />
alt=»jivo banner 728×90″ /> alt=»jivo banner 120×600″ />
alt=»flexbe banner 728×90″ /> alt=»flexbe banner 120×600″ />
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 2
Оценок пока нет. Поставьте оценку первым.
Похожие посты
- 22 декабря, 2019
- 202
Руководство по загрузке файлов на сервер в PHP
- 18 декабря, 2019
- 1052
Руководство по GET и POST запросам в PHP
- 16 декабря, 2019
- 84
Список сообщений об ошибках в PHP
Разработка сайтов для бизнеса
Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.