Привет. Сегодня решил написать о константах в PHP. Расскажу как константы работают, какие чаще всего применяются и бывают.
Что такое константы в контексте PHP?
Константы — это по сути переменные у которых нельзя переопределить значение. Т.е после указания их значения вы больше не сможете его менять по ходу выполнения скрипта. Они как правило пишутся в верхнем регистре и в названии конкретно отражают хранимую в них информацию.
В PHP существует 2 разновидности констант:
- Обычные (задаются программистом)
- Предопределенные (задаются интерпретатором)
Обычные константы
Такой тип констант обычно используются как правило для служебных целей и создаются программистом в процессе написание кода.
Синтаксис создания обычной константы:
Define("PI",3.1415);
Создание константы происходит с помощью встроенной конструкции define ("Имя константы","Значение константы").
Для краткого пояснения механизма работы с константами покажу пример того что значения в константах задается один раз, и более не может быть изменено:
Для того чтобы проверить существование константы в языке предусмотрена функция defined («CONST_NAME»).
Предопределенные константы
Предопределенные константы отличаются от обычных способом создания. Они устанавливаются самим интерпретатором и меняют свое значение в контексте выполнения программы. Так же они не чувствительны к регистру, __CLASS__ или __class__ будут прекрасно выполнены интерпретатором.
Вот самые часто используемые предопределенные константы:
- __FILE__ — хранит имя выполняемого на данный момент скрипта.
- __FUNCTUIN__ — имя текущей функции.
- __CLASS__ — имя текущего класса.
- PHP_VERSION — содержит версию интерпретатора PHP.
- TRUE , FALSE , NULL — содержат в себе значения соответствующие своему названию.
Для примера работы таких констант посмотрим на использование одной из них — __FUNCTION__ :
Как можно видеть из примера константа __function__ вернула имя функции в которой она была первоначально вызвана — abc () .
И да, константу невозможно удалить как обычную переменную функцией unset () , она существует от начала и до конца выполнения программы.
На этом все, желаю успешной практики и хорошего настроения. До скорого.
сайт Права на контент защищены.Последнее обновление: 1.11.2015
Константы, как и переменные хранят определенное значение, только в отличие от переменных значение констант может быть установлено только один раз, и далее мы уже не можем его изменить. Например, определим числовую константу:
Для определения константы используется оператор define , который имеет следующую форму: define(string $name, string $value, bool $case_sen=false) . Параметр $name передает название константы, а параметр $value - ее значение. Третий необязательный параметр принимает логическое значение true или false . Если значение равно false, то при использовании константы будет учитываться ее регистр, если true - регистр не учитывается. В нашем случае третий параметр не использован, поэтому он по умолчанию равен false.
После определения константы мы можем ее использовать также, как и обычную переменную. Единственное исключение - мы не сможем изменить ее значение. Другое отличие от переменной - не надо использовать знак $ . То есть выражение NUMBER=33; работать не будет.
Предопределенные константы
Кроме создаваемых программистом констант в PHP имеется еще несколько встроенных констант:
FILE__ : хранит полный путь и имя текущего файла
LINE__ : хранит текущий номер строки, которую обрабатывает интерпретатор
DIR__ : хранит каталог текущего файла
FUNCTION__ : название обрабатываемой функции
CLASS__ : название текущего класса
METHOD__ : название обрабатываемого метода
NAMESPACE__ : название текущего пространства имен
Например, выведем текущую выполняемую строку и название файла:
Проверка существования константы
Чтобы проверить, определена ли константы, мы можем использовать функцию bool defined(string $name) . Если константа $name определена, то функция будет возвращать значение true
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы разобрали оператор эквивалентности в PHP . В данной статье я бы хотел рассказать о константах в PHP . В школе вы не раз встречали константы, например "число PI" или из физики универсальная газовая постоянная (R). Константы один раз определяют и они уже не меняются . Тоже самое касается констант в программировании, т.е. мы один раз определяем константу и она больше не меняется в коде программы. Константами могут быть различные математические величины, пути до файлов.
Чем константа отличается от переменной:
1) Её определяют один раз и нигде больше нельзя присвоить значение,
2) Чтобы к ней обратиться, не нужно ставить знак "$" перед ней (здесь есть минус — теперь мы не можем использовать имя константы в текстовой строке).
Давайте выведем константу "PI":
Константы бывают двух типов: определяемые интерпретатором и определяемые пользователем :
Примеры констант, определяемых интерпретатором:
1) __FILE__
— хранит имя файла, в котором находится тот код, который сейчас выполняется,
2) PHP_VERSION
— версия интерпретатора PHP,
3) PHP_OS
— версия операционной системы, под которой работает PHP.
Наберите следующий код и посмотрите, какие константы ещё бывают:
Можно определять свои собственные константы, делается это с помощью оператора define . Давайте определим 2 константы:
"; echo Const2; ?>
В данном случае у нас выведутся значения данных констант.
По умолчанию регистр символов в имени константы учитывается, его можно отключить с помощью необязательного третьего параметра, например так:
"; echo neW1; ?>
Вы увидите, что всё работает (в предыдущем примере работать не будет, так как там учитывается регистр букв).
Обратите внимание на кавычки, в которых пишется имя константы. Это обязательно нужно делать. Также нельзя создавать константы с одинаковыми именами.
В PHP можно проверить существует константа или нет с помощью функции defined(имя константы) . Давайте разберем на примере, чтобы стало понятно:
Наберите данный пример и посмотрите, что будет.
В этой заметке разберемся, в чем разница в объявлении PHP констант с помощью ключевого слова const и функции define() .
Константы в PHP - это «постоянные», значения которых указывается всего один раз и затем не может быть изменено. При попытке изменить значение, оно не изменится и появится PHP заметка: «Constant already defined» (константа уже определена):
Define("FOO", "val"); define("FOO", "val2"); // Notice: Constant already defined echo FOO; //> val
Объявлять константы в PHP можно двумя способами:
// 1 define("NAME", "VALUE"); // 2 const NAME = "VALUE";
У каждого способа есть свои особенности, чтобы их понять, давайте рассмотрим все поэтапно, как и что менялось с каждой версией PHP.
Как создавать константы
PHP меньше 5.3
До 5.3 в PHP, константы можно было определять только через define() . Ключевое слово const появилось с версии 5.3.
Константы могут хранить только скаляры . Скалярные переменные - это переменные с типами integer , float , string и boolean . Типы array , object и resource не являются скалярными.
// скаляры define("FOO", 10); define("FOO", 10.9); define("FOO", "val"); define("FOO", true); // не скаляры define("FOO", array(1)); // константа не установиться и получим Warning define("FOO", (object) array(1)); // константа не установиться и получим Warning
С версии PHP 5.3
Появилось ключевое слово const и теперь константу можно определять еще и с помощью него.
Однако, в const нельзя указать переменную, функцию или какое то выражение, а нужно передавать скаляр «напрямую»:
Const FOO = "val"; // нет ошибок const FOO = $var; // Parse error const FOO = home_url(); // Parse error const FOO = 5 + 10; // Parse error const FOO = "foo"."bar"; // Parse error
Тогда как для define() таких ограничений нет...
Define("FOO", "val"); // нет ошибок define("FOO", $var); // нет ошибок define("FOO", home_url()); // нет ошибок define("FOO", 5 + 10); // нет ошибок define("FOO", "foo"."bar"); // нет ошибок
PHP 5.6
Стало возможным указывать в значения const примитивные PHP выражения (выражения из скаляров):
Const FOO = 1 + 2; const FOO = "foo" . "bar";
Стало возможным хранить массивы в константах:
Const FOO = ; // работает define("FOO", ); // не работает PHP 5.6, работает в PHP 7.0
Разница между define() и const
#1 const должны быть объявлены в верхней области
В отличие define() , const должны быть объявлены в самой верхней области видимости, потому что они определяются при компилировании скрипта. Это значит, что их нельзя объявлять внутри функций/циклов/выражений if или try/catch блоков.
If (1) { const NAME = "VALUE"; // не работает } // но if (1) { define("NAME", "VALUE"); // работает }
#2 const всегда регистрозависима
const всегда регистро-зависима, в то время как define() позволяет сделать регистро-независимые константы:
Define("NAME", "VALUE", true); echo NAME; // VALUE echo name; // VALUE
#3 const понимает только скаляры
Это справедливо только для версий PHP 5.6 и ниже...
const нельзя передать переменные, функции, выражения, а define() можно:
Const FOO = $var; // Parse error const FOO = home_url(); // Parse error define("FOO", $var); // нет ошибок define("FOO", home_url()); // нет ошибок
#4 const может хранить массивы с версии PHP 5.6 а define с PHP 7.0
const FOO = ; // работает в PHP 5.6 define("FOO", ); // не работает PHP 5.6, работает в PHP 7.0Итоги сравнения
Определять константу почти всегда лучше с помощью define() , потому что тут больше возможностей и меньше вариантов «поймать» ошибку... Исключение - это когда у вас версия PHP 5.6 и вам нужно сохранить массив в константу, тут поможет const .
Константы PHP класса
Объявляются только с помощью const . Правила для них такие как описано выше: принимают только скаляры, не понимают PHP переменные, функции, выражения...
Постоянные класса всегда общедоступны - нет статуса private или protected .
Объявленная константа принадлежит именно классу, она не принадлежит ни одному объекту и является общей на все объекты (экземпляры) класса.
Class My_Class { const NAME = "VALUE"; // начиная с PHP 5.6 можно использовать математические выражения const SEC_PER_DAY = 60 * 60 * 24; function print_name() { // обращение к константе класса внутри метода через self (сам класс) echo self::NAME; } } // обращение к константе вне класса // можно вызывать из глобальной области видимости без инициализации экземпляра класса echo My_Class::NAME;
Константы для классов очень похожи на статические (static) свойства класса.
Class My_Class { const NAME = "VALUE"; static $name = "VALUE";; } echo My_Class::NAME; echo My_Class::$name;
«Волшебные» константы
И в заключении вспомним про особые константы PHP...
В PHP есть девять волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Все "волшебные" константы разрешаются во время компиляции, в отличии от обычных констант, которые разрешаются во время исполнения. Специальные константы нечувствительны к регистру и их список приведен ниже:
Константа | Описание |
---|---|
__LINE__ | Текущий номер строки в файле. |
__FILE__ | Полный путь и имя текущего файла, в котором вызывается константа. |
__DIR__ | PHP 5.3.0. Директория файла, в котором используется константа. То же самое что dirname(__FILE__) . Не имеет слэша в конце, кроме корневой директории. |
__FUNCTION__ | Имя функции. |
__CLASS__ | Имя класса. Это имя содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar). Также работает в трейтах. При использовании в методах трейтов является именем класса, в котором эти методы используется. |
__TRAIT__ | PHP 5.4.0. Имя трейта. Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar). |
__METHOD__ | Имя метода класса. |
__NAMESPACE__ | PHP 5.3.0. Имя текущего пространства имен. |
ClassName::class | PHP 5.5.0. Полное имя класса (с указанием пространства имен). Также смотрите::class. |
Встречаются случаи, когда переменные довольно неудобно использовать для постоянного хранения каких либо определенных значений, которые не меняются в течение работы программы. Такими значениями могут быть математические константы, пути к файлам, разнообразные пароли и.т.д. Как раз для этих целей в PHP предусмотрена такая конструкция, как.
называется именованная величина, которая не изменяется в процессе выполнения программы (скрипта).
В РНР константы определяются функцией define() . Эта функция имеет следующий формат:
define ($name , $value , $case_sen ), где:
$name
- имя константы;
$value
- значение константы;
$case_sen
- необязательный параметр логического типа,
указывающий, следует ли учитывать регистр букв (true) или нет (false).
Пример определения и использования констант в PHP:
php
echo pi
;
// Выводит 3.14
?>
Если параметр $case_sen равен true , то интерпретатор будет учитывать регистр символов при работе с константой. Обратите внимание, что константы используются без предваряющего знака $ .
Различия между константами и переменными:
У констант нет приставки в виде знака доллара ($ );
Константы можно определить только с помощью функции define() , а не присваиванием значения;
Константы могут быть определены и доступны в любом месте без учета области видимости;
Константы не могут быть определены или аннулированы после первоначального объявления;
Константы могут иметь только скалярные значения.
Проверка существования констант
Для проверки существования константы можно использовать функцию defined() . Данная функция возвращает true , если константа объявлена. Приведем пример:
php
// Объявляем константу pi
define
("pi"
,
3.14
,
true
);
if
(defined
("pi"
)==
true
)
echo
"Константа pi объявлена!"
;
// Скрипт выведет "Константа pi объявлена!"
?>
Предопределенные константы PHP
В PHP существуют следующие предопределенные константы:
PHP предоставляет большой список предопределенных констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.
Есть пять предопределенных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, константа __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:
Имя | Описание |
---|---|
__LINE__ | Текущая строка в файле. |
__FILE__ | Полный путь и имя текущего файла. |
__DIR__ | The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory. |
__FUNCTION__ | Имя функции. (Добавлена в PHP 4.3.0.) |
__CLASS__ | Имя класса. (Добавлена в PHP 4.3.0.) |
__TRAIT__ | The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar). |
__METHOD__ | Имя метода класса. (Добавлена в PHP 5.0.0) |
__NAMESPACE__ | The name of the current namespace. |
Дополнительно