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.
Константа может быть определена с помощью ключевого слова 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
.
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.
Constants of constant :
<?php
const foo = hello;
const bar = foo;
const bd = bar;
echo "bd = " .bd; // Prints out: Hello
?>
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] => …
)
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.