Константы - это значения, которые не изменяются со временем. Ещё из школы Вы, наверняка, знаете многие константы, например, число п , число e , ускорение свободного падения и другие. И, разумеется, при программировании тоже очень часто возникает необходимость ввода констант . И о том, как создавать и использовать константы в PHP , мы и поговорим в этой статье.
Давайте с Вами создадим константу числа п :
define(PI, 3.1415926);
echo PI;
?>
Оператор define создаёт константу PI и присваивает ей значение 3.1415926 . Дальше мы выводим эту константу через оператор echo . Всё очень просто, однако, есть одна рекомендация, которую я советую Вам всегда соблюдать. Обязательно пишите константы заглавными буквами. Не то, чтобы это было обязательно, но крайне желательно. И так принято не только в PHP , но и в других языках тоже.
Разумеется, впоследствии изменить константу PI будет нельзя (на то она и константа ).
Теперь разберём одну функцию, которая проверяет: "Определена ли заданная константа ". Давайте напишем такой скрипт:
if (!defined("PI")) define(PI, 3.1415926);
echo PI;
?>
Здесь проверяется существование константы PI . И если она не существует (то есть функция define() вернула false ), то тогда инициализируем эту константу. Затем просто выводим её.
Как видите, создавать и использовать свои константы в PHP - это очень просто.
И, напоследок, хочется рассказать об уже встроенных константах PHP . Давайте с Вами напишем простой скрипт:
phpinfo();
?>
Ближе к концу есть раздел "PHP Variable ". Собственно, это не совсем константы , однако, они являются константами при выполнении данного скрипта. Разумеется, при выполнении другого скрипта они уже будут иметь другие значения (не все, разумеется). Давайте с Вами выведем пару констант , чтобы Вы поняли, как с ними работать, ведь они используются безумно часто:
echo $_SERVER["REMOTE_ADDR"];
echo "
";
echo $_SERVER["QUERY_STRING"];
?>
В данном скрипте мы выводим IP-адрес пользователя , запустившего скрипт, а на следующей строке выводим строку запроса (например, "index.php?id=7 "). Забегая немного вперёд, говорю, что здесь мы работаем с глобальным массивом $_SERVER . С массивами мы ещё познакомимся, но, думаю, что те, кто работал с массивами в других языках программирования, без проблем узнают синтаксис. Что же касается других констант , то с ними работа происходит аналогично.
В этой заметке разберемся, в чем разница в объявлении 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. Расскажу как константы работают, какие чаще всего применяются и бывают.
Что такое константы в контексте 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 () , она существует от начала и до конца выполнения программы.
На этом все, желаю успешной практики и хорошего настроения. До скорого.
сайт Права на контент защищены.» Константы в PHP?
Употребляя в повседневной жизни слово «константа», мы имеем в виду постоянное значение. Это может быть число Пи (3,14) или температура кипения воды (100 °С). В РНР тоже имеется возможность использовать константы. Смысл их применения заключается в том, что обозначив определенное значение, мы можем использовать его на протяжении всего кода программы.
(!) Константа - это неизменяемое значение.
Например, ваш друг Василий Пупкин создал Web-сайт и хочет, чтобы все знали имя администратора. При этом он находит самое простое и, на первый взгляд, верное решение (листинг 4.19).
Листинг 4.19. Вывод фамилии и имени администратора Web-сайта.
‹?php
echo "Администратор сайта: Пупкин Василий"; // вывод сообщения
?›
Соответственно, надо изменить имя администратора. Скорее всего, вы станете искать по всем страницам сайта текст, содержащий строчку Пупкин Василий. После нахождения надо разобраться, менять ли ее на ваше имя или нет. Не трудно заметить, что решение, на первый взгляд, простой задачи занимает много времени и не гарантирует корректную работу программы. Все эти проблемы можно было бы избежать, если бы Василий применил константу для обозначения своего имени. Для этого надо выбрать имя константы (обычно его называют идентификатором), например ADMIN_NAME, после чего определить ее значение (в нашем случае Пупкин Василий).
Теперь решение задачи будет выглядеть так, как показано в листинге 4.20.
Листинг 4.20. Пример использования констант.
‹html›
‹head›
‹title›Пример использования констант‹/title›
‹/head›
‹body›
‹?php
define("ADMIN_NAME", "Пупкин Василий"); // определение константы
echo "Администратор сайта: "; // вывод сообщения
echo ADMIN_NAME; // вывод значения константы
?›
‹/body›
‹/html›
В этом случае идентификатор ADMIN_NAME будет заменен значением Пупкин Василий. Для того чтобы изменить имя администратора Web-сайта, потребуется только корректировка строчки с определением константы. Рассмотрим эту тему более подробно.
Проверка существования констант
Константы в PHP
Константой называется именованная величина, которая не изменяется в процессе выполнения программы.
В отличие от переменной, вы не можете изменить значение константы, которое было ей присвоено при её объявлении. Константы удобно использовать для хранения значений, которые не должны изменяться во время работы программы. Константы могут содержать только скалярные данные (логического, целого, плавающего и строкового типов).
В РНР константы определяются функцией define() . Эта функция имеет следующий формат:
define ($name , $value , $case_sen ), где:
$name
- имя константы;
$value
- значение константы;
$case_sen
- необязательный параметр логического типа,
указывающий, следует ли учитывать регистр букв (true) или нет (false).
Пример определения и использования констант в PHP:
define("pi",3.14,true);
echo pi;
// Выводит 3.14
?>
Если параметр $case_sen равен true , то интерпретатор будет учитывать регистр символов при работе с константой. Обратите внимание, что константы используются без предваряющего знака $ .
Различия между константами и переменными:
· У констант нет приставки в виде знака доллара ($ );
· Константы можно определить только с помощью функции define() , а не присваиванием значения;
· Константы могут быть определены и доступны в любом месте без учета области видимости;
· Константы не могут быть определены или аннулированы после первоначального объявления; и
· Константы могут иметь только скалярные значения.
Для проверки существования константы можно использовать функцию defined() . Данная функция возвращает true , если константа объявлена. Приведем пример:
// Объявляем константу pi
define("pi",3.14,true);
if (defined("pi")==true) echo "Константа pi объявлена!";
// Скрипт выведет "Константа pi объявлена!"
?>
В PHP существуют следующие предопределенные константы:
PHP предоставляет большой список предопределенных констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.
Есть пять предопределенных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, константа __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже.