Регистрация Войти
Войти через VK




Поиск по сайту



PHP Поиск



Константы

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

Имя константы должно соответствовать тем же правилам, что и другие имена в PHP. Правильное имя начинается с буквы или символа подчеркивания и состоит из букв, цифр и подчеркиваний. Регулярное выражение для проверки правильности имени константы выглядит так: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Замечание: Понятие "буквы" здесь - это символы a-z, A-Z, и другие символы с ASCII-кодами от 127 до 255 (0x7f-0xff).

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

Синтаксис

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

Константы могут содержать только скалярные данные (boolean, integer, float и string типов). Возможно также определять константы типа resource, но этого следует избегать, так как это может привести к неожиданным результатам.

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

Замечание: Константы и (глобальные) переменные находятся в разных пространствах имен. Это означает, что, например, TRUE и $TRUE являются совершенно разными вещами.

Если вы используете неопределенную константу, PHP предполагает, что вы имеете ввиду само имя константы, как если бы вы указали литерал типа string (CONSTANT вместо "CONSTANT"). При этом будет сгенерирована ошибка уровня E_NOTICE. Смотрите также главу руководства, которая разъясняет, почему $foo[bar] - это неправильно (конечно, если вы перед этим не объявили bar как константу с помощью define()). Если вы просто хотите проверить, определена ли константа, используйте функцию defined().

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

  • У констант нет приставки в виде знака доллара ($);
  • Константы можно определить только с помощью функции define(), а не присваиванием значения;
  • Константы могут быть определены и доступны в любом месте без учета области видимости;
  • Константы не могут быть переопределены или аннулированы после первоначального объявления; и
  • Константы могут иметь только скалярные значения.

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

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

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

Некоторые "волшебные" константы PHP
Имя Описание
__LINE__ Текущий номер строки в файле.
__FILE__ Полный путь и имя текущего файла. Если используется внутри подключаемого файла, то возвращается имя данного файла. Начиная с версии PHP 4.0.2, __FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в старых версиях в некоторых обстоятельствах возвращался относительный путь.
__DIR__ Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__). Возвращаемое имя директории не оканчивается на слэш, за исключением корневой директории (добавлена в PHP 5.3.0.)
__FUNCTION__ Имя функции. (Добавлена в PHP 4.3.0.) Начиная с PHP 5 эта константа возвращает имя функции точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре.
__CLASS__ Имя класса. (Добавлена в PHP 4.3.0) Начиная с PHP 5 эта константа возвращает имя класса точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре. Имя класса содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar). Обратите внимание, что начиная с PHP5.4 __CLASS__ также работает в трейтах. При использовании в методах трейтов __CLASS__ является именем класса, в котором эти методы используется.
__TRAIT__ Имя трейта. (Добавлена в PHP 5.4.0) Начиная с PHP 5.4 эта константа возвращает имя трейта точно так, как оно было объявлено (с учетом регистра). Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar).
__METHOD__ Имя метода класса. (Добавлена в PHP 5.0.0) Имя метода возвращается так, как оно было объявлено (с учетом регистра).
__NAMESPACE__ Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (Добавлена в версии PHP 5.3.0).
Пример #1 Правильные и неправильные имена констант
// Правильные имена констант
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR", "something more");
// Неправильные имена констант
define("2FOO",    "something");
// Это корректное объявление, но лучше его не использовать:
// PHP однажды может зарегистрировать "волшебную" константу,
// которая сломает ваш скрипт
define("__FOO__", "something");
Пример переопредления PHP_INT_MIN
define('PHP_INT_MIN', ~PHP_INT_MAX);
MAX for 8bit-signed: 01111111 MIN for 8bit-signed: 10000000

Смотрите также: defined().

Описание на ru2.php.net
Описание на php.ru

.

Популярное:


Содержание:


Новое за неделю



Сейчас на сайте: 1747