PHP 8.2.0 Released!

Синтаксис

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

При использовании ключевого слова const допускаются только скалярные выражения (bool, int, float и string) и константы array, содержащие только скалярные выражения. Можно определить константы с типом resource, но не рекомендуется, так как это может привести к неожиданным результатам.

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

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

Если используется неопределённая константа, выбрасывается Error. До PHP 8.0.0 неопределённые константы интерпретировались как простое слово string, то есть (CONSTANT vs "CONSTANT"). Этот резервный вариант объявлен устаревшим с PHP 7.2.0, при этом будет сгенерирована ошибка уровня E_WARNING. До PHP 7.2.0 вместо этого выдавалась ошибка уровня E_NOTICE. Смотрите также главу руководства, которая разъясняет, почему $foo[bar] - это неправильно (если bar не является константой). Это не относится к (полностью) определённым константам, которые всегда будут выбрасывать Error, если они не определены.

Замечание: Чтобы проверить, установлена ли константа, используйте функцию defined().

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

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

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

<?php
define
("CONSTANT""Здравствуй, мир.");
echo 
CONSTANT// выводит "Здравствуй, мир."
echo Constant// Выбросит ошибку: Неопределённая константа "Constant"
               // До PHP 8.0.0 выводит "Constant" и выдаёт предупреждение.
?>

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

<?php
// Простое скалярное значение
const CONSTANT 'Здравствуй, мир.';

echo 
CONSTANT;

// Скалярное выражение
const ANOTHER_CONST CONSTANT ' Прощай, мир.';
echo 
ANOTHER_CONST;

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

// Массивы в константе
define('ANIMALS', array(
    
'dog',
    
'cat',
    
'bird'
));
echo 
ANIMALS[1]; // выводит "cat"
?>

Замечание:

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

Смотрите также

add a note

User Contributed Notes 6 notes

up
12
souzanicolas87 at gmail dot com
11 months ago
the documentation doesn't go too far in explaining the crucial difference between the two ways of declaring constants in PHP.

Const is handled at compile time, define() at run time. For this reason, a constant cannot be conditionally defined using Const, for example.

Another difference we can notice occurs in the constant declarations in classes. Const infiltrates the class scope, while define() leaks into the global scope.

<?php

Class Myclass (){
    const
NAME = "Nicolas";
}

?>

The NAME constant is within the scope of the MyClass class.
up
8
login at (two)view dot de
5 years 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.
up
-5
LilyWhite
1 year ago
> Constants and (global) variables are in a different namespace. This implies that for example true and $TRUE are generally different.

This means that you may assign a value to a variable with the same name of a constant, which might lead to unwanted results.

<?php
const FOO = "hello";
$FOO = "goodbye";
echo
$FOO;
?>

will output ``goodbye''.
up
-7
privat at ulrich-kapp dot de
2 years ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
up
-9
mh at hanft dot de
3 years ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

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

won't work with PHP 5.6, but

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

will.
up
-23
halfhearted13 at gmail dot com
2 years ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
To Top