Php создание константы. Константы

Последнее обновление: 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 предусмотрена такая конструкция, как.

называется именованная величина, которая не изменяется в процессе выполнения программы (скрипта).

В РНР константы определяются функцией define() . Эта функция имеет следующий формат:

define ($name , $value , $case_sen ), где:

$name - имя константы;
$value - значение константы;
$case_sen - необязательный параметр логического типа,
указывающий, следует ли учитывать регистр букв (true) или нет (false).

Пример определения и использования констант в PHP:


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 существуют следующие предопределенные константы:

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.

Дополнительно

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы разобрали оператор эквивалентности в 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. Правильное имя начинается с буквы или символа подчеркивания и состоит из букв, цифр и подчеркиваний. Регулярное выражение для проверки правильности имени константы выглядит так: *

Замечание : Понятие "буквы" здесь - это символы a-z, A-Z, и другие символы с ASCII-кодами от 127 до 255 (0x7f-0xff).

Синтаксис

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

Константы могут содержать только скалярные данные (boolean , integer , float и string типов). Возможно также определять константы типа , но этого следует избегать, так как это может привести к неожиданным результатам.

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

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

Если вы используете неопределенную константу, PHP предполагает, что вы имеете ввиду само имя константы, как если бы вы указали литерал типа string (CONSTANT вместо "CONSTANT"). При этом будет сгенерирована ошибка уровня E_NOTICE . Смотрите также главу руководства, которая разъясняет, почему $foo - это неправильно (конечно, если вы перед этим не объявили bar как константу с помощью define()). Если вы просто хотите проверить, определена ли константа, используйте функцию defined() .

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

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

"Волшебные" константы

PHP предоставляет большой список предопределенных констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.

Есть семь волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:

Некоторые "волшебные" константы PHP
Имя Описание
__LINE__ Текущий номер строки в файле.
__FILE__ Полный путь и имя текущего файла. Если используется внутри подключаемого файла, то возвращается имя данного файла. Начиная с версии PHP 4.0.2, __FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в старых версиях в некоторых обстоятельствах возвращался относительный путь.
__DIR__ Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__) . Возвращаемое имя директории не оканчивается на слэш, за исключением корневой директории (добавлена в PHP 5.3.0.)
__FUNCTION__ Имя функции. (Добавлена в PHP 4.3.0.) Начиная с PHP 5 эта константа возвращает имя функции точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре.
__CLASS__ Имя класса. (Добавлена в PHP 4.3.0) Начиная с PHP 5 эта константа возвращает имя класса точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре. Имя класса содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar ). Обратите внимание, что начиная с PHP5.4 __CLASS__ также работает в трейтах. При использовании в методах трейтов __CLASS__ является именем класса, в котором эти методы используется.
__TRAIT__ Имя трейта. (Добавлена в PHP 5.4.0) Начиная с PHP 5.4 эта константа возвращает имя трейта точно так, как оно было объявлено (с учетом регистра). Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar ).
__METHOD__ Имя метода класса. (Добавлена в PHP 5.0.0) Имя метода возвращается так, как оно было объявлено (с учетом регистра).
__NAMESPACE__ Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (Добавлена в версии PHP 5.3.0).
Пример #1 Правильные и неправильные имена констант
// Правильные имена констант define("FOO", "something"); define("FOO2", "something else"); define("FOO_BAR", "something more"); // Неправильные имена констант define("2FOO", "something"); // Это корректное объявление, но лучше его не использовать: // PHP однажды может зарегистрировать "волшебную" константу, // которая сломает ваш скрипт define("__FOO__", "something");

Для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.

Есть девять магических констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Все магические константы разрешаются во время компиляции, в отличие от обычных констант, которые разрешаются во время выполнения. Специальные константы нечувствительны к регистру и их список приведен ниже:

Некоторые магические константы PHP
Имя Описание
__LINE__ Текущий номер строки в файле.
__FILE__ Полный путь и имя текущего файла с развернутыми симлинками. Если используется внутри подключаемого файла, то возвращается имя данного файла.
__DIR__ Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__) . Возвращаемое имя директории не оканчивается на слеш, за исключением корневой директории.
__FUNCTION__ Имя функции или {closure} в случае анонимной функции.
__CLASS__ Имя класса. Это имя содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar ). Обратите внимание, что начиная с PHP 5.4 __CLASS__ также работает в трейтах. При использовании в методах трейтов __CLASS__ является именем класса, в котором эти методы используется.
__TRAIT__ Имя трейта. Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar ).
__METHOD__ Имя метода класса.
__NAMESPACE__ Имя текущего пространства имен.
ClassName::class Полное имя класса (с указанием пространства имен). См. также ::class .

Смотрите также get_class() , get_object_vars() , file_exists() и function_exists() .

Список изменений

14 years ago

The difference between
__FUNCTION__ and __METHOD__ as in PHP 5.0.4 is that

FUNCTION__ returns only the name of the function

while as __METHOD__ returns the name of the class alongwith the name of the function

class trick
{
function doit()
{
echo __FUNCTION__;
}
function doitagain()
{
echo __METHOD__;
}
}
$obj=new trick();
$obj->doit();
output will be ---- doit
$obj->doitagain();
output will be ----- trick::doitagain

12 years ago

The __CLASS__ magic constant nicely complements the get_class() function.

Sometimes you need to know both:
- name of the inherited class
- name of the class actually executed

Here"s an example that shows the possible solution:

Class base_class
{
function say_a ()
{

" ;
}

Function say_b ()
{

" ;
}

class derived_class extends base_class
{
function say_a ()
{
parent :: say_a ();
echo ""a" - said the " . __CLASS__ . "
" ;
}

Function say_b ()
{
parent :: say_b ();
echo ""b" - said the " . get_class ($this ) . "
" ;
}
}

$obj_b = new derived_class ();

$obj_b -> say_a ();
echo "
" ;
$obj_b -> say_b ();

?>

The output should look roughly like this:

"a" - said the base_class
"a" - said the derived_class

"b" - said the derived_class
"b" - said the derived_class

3 years ago

Note a small inconsistency when using __CLASS__ and __METHOD__ in traits (stand php 7.0.4): While __CLASS__ is working as advertized and returns dynamically the name of the class the trait is being used in, __METHOD__ will actually prepend the trait name instead of the class name!

8 years ago

There is no way to implement a backwards compatible __DIR__ in versions prior to 5.3.0.

The only thing that you can do is to perform a recursive search and replace to dirname(__FILE__):
find . -type f -print0 | xargs -0 sed -i "s/__DIR__/dirname(__FILE__)/"

5 years ago

A lot of notes here concern defining the __DIR__ magic constant for PHP versions not supporting the feature. Of course you can define this magic constant for PHP versions not yet having this constant, but it will defeat its purpose as soon as you are using the constant in an included file, which may be in a different directory then the file defining the __DIR__ constant. As such, the constant has lost its *magic*, and would be rather useless unless you assure yourself to have all of your includes in the same directory.

Concluding: eye catchup at gmail dot com"s note regarding whether you can or cannot define magic constants is valid, but stating that defining __DIR__ is not useless, is not!

7 years ago

You cannot check if a magic constant is defined. This means there is no point in checking if __DIR__ is defined then defining it. `defined("__DIR__")` always returns false. Defining __DIR__ will silently fail in PHP 5.3+. This could cause compatibility issues if your script includes other scripts.

echo (defined ("__DIR__" ) ? "__DIR__ is defined" : "__DIR__ is NOT defined" . PHP_EOL );
echo (defined ("__FILE__" ) ? "__FILE__ is defined" : "__FILE__ is NOT defined" . PHP_EOL );
echo (defined ("PHP_VERSION" ) ? "PHP_VERSION is defined" : "PHP_VERSION is NOT defined" ) . PHP_EOL ;
echo "PHP Version: " . PHP_VERSION . PHP_EOL ;
?>
Output:
__DIR__ is NOT defined
__FILE__ is NOT defined
PHP_VERSION is defined
PHP Version: 5.3.6

Instagram