Константы

Константы - это идентификаторы (имена) простых значений. Исходя из их названия, нетрудно понять, что их значение не может изменяться в ходе выполнения скрипта (исключения представляют "волшебные" константы, которые на самом деле не являются константами в полном смысле этого слова). Имена констант чувствительны к регистру. По принятому соглашению, имена констант всегда пишутся в верхнем регистре.

Имя константы должно соответствовать тем же правилам, что и другие имена в PHP. Правильное имя начинается с буквы или символа подчеркивания и состоит из букв, цифр и подчеркиваний.

Как и superglobals, константы доступны из любой области видимости. Вы можете использовать константы в любом месте вашего скрипта, не обращая внимания на текущую область видимости.

Синтаксис

Вы можете определить константу с помощью функции define() или с помощью ключевого слова const вне объявления класса начиная с версии PHP 5.3.0. После того, как константа определена, ее значение не может быть изменено или аннулировано.

До PHP 5.6 константы могут содержать только скалярные данные (boolean, integer, float и string типов). С PHP 5.6 возможно также определять константы как скалярные выражения, и также можно определять константы с типом array. Можно определять константы с типом resource, но не рекомендуется, так как может привести к неожиданным результатам.

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

  • Определяет именованную константу.
  • Если параметр $case_insensitive установлен как TRUE, то константа будет определена без учета регистра.
  • Регистронезависимые константы хранятся в нижнем регистре.

Получить значение константы можно, указав ее имя. В отличие от переменных, вам не нужно предварять имя константы символом $. Также вы можете использовать функцию constant() для получения значения константы, если вы формируете имя константы динамически. Используйте функцию get_defined_constants() для получения списка всех объявленных констант.

Различия между константами и переменными:

  • У констант нет приставки в виде знака доллара ($);
  • До PHP 5.3 константы можно определить только с помощью функции define(), а не присваиванием значения;
  • Константы могут быть определены и доступны в любом месте без учета области видимости;
  • Константы не могут быть переопределены или аннулированы после первоначального объявления;
  • Константы могут иметь только скалярные значения, или скалярные и массивы в PHP 5.6 и новее. Вы можете использовать массивы в скалярных выражениях констант (например, const FOO = array(1,2,3)[0];), но результатом должно быть скалярное выражение.

Определение констант:

<?php
define("CONSTANT", "Здравствуй, мир.");
echo CONSTANT; // выводит "Здравствуй, мир."
echo Constant; // выводит "Constant" и предупреждение.
?>

Определение констант с помощью ключевого слова const:

<?php
// Работает, начиная с версии PHP 5.3.0
const CONSTANT = 'Здравствуй, мир.';
echo CONSTANT;

// Работает, начиная с версии PHP 5.6.0
const ANOTHER_CONST = CONSTANT.'; Прощай, мир.';
echo ANOTHER_CONST;
?>

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

"Волшебные" константы

PHP предоставляет большой список предопределенных констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.

Есть восемь волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:

Некоторые "волшебные" константы PHP

Имя Описание
__LINE__ Текущий номер строки в файле.
__FILE__ Полный путь и имя текущего файла с развернутыми симлинками. Если используется внутри подключаемого файла, то возвращается имя данного файла.
__DIR__ Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__). Возвращаемое имя директории не оканчивается на слеш, за исключением корневой директории.
__FUNCTION__ Имя функции. Если вызывается в методе, то вернет только имя метода (без класса и прострнства имен).
__CLASS__ Имя класса. Это имя содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar). Обратите внимание, что начиная с PHP5.4 __CLASS__ также работает в трейтах. При использовании в методах трейтов __CLASS__ является именем класса, в котором эти методы используется.
__TRAIT__ Имя трейта. Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar).
__METHOD__ Имя метода класса. Содержит пространство имен, если есть.
__NAMESPACE__ Имя текущего пространства имен.