Синтаксис

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

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

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

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

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

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

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

Пример #1 Определение констант

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

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

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

echo 
CONSTANT;

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

const 
ANIMALS = array('dog''cat''bird');
echo 
ANIMALS[1]; // выводит "cat"

// Работает в PHP 7
define('ANIMALS', array(
    
'dog',
    
'cat',
    
'bird'
));
echo 
ANIMALS[1]; // выводит "cat"
?>

Замечание:

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

Замечание:

Константы определенный с помощью ключевого слова const всегда регистрозависимы. Тогда как при использовании define() они могут быть регистронезависимы.

Смотрите также Константы классов.

add a note add a note

User Contributed Notes 1 note

up
0
login at (two)view dot de
3 months ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
To Top