SunshinePHP 2019

Синтаксис

Вы можете определить константу с помощью функции 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"). Этот резервный вариант объявлен устаревшим с PHP 7.2.0, при этом будет сгенерирована ошибка уровня E_WARNING при его использовании (ранее вместо этого выдавалась ошибка уровня 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
4
login at (two)view dot de
1 year 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