Задать выражение в константе php. Магические методы и предопределенные константы в PHP. Как мне использовать внутренние или глобальные классы в пространстве имен

Привет. Сегодня решил написать о константах в PHP. Расскажу как константы работают, какие чаще всего применяются и бывают.

Что такое константы в контексте PHP?

Константы — это по сути переменные у которых нельзя переопределить значение. Т.е после указания их значения вы больше не сможете его менять по ходу выполнения скрипта. Они как правило пишутся в верхнем регистре и в названии конкретно отражают хранимую в них информацию.

В PHP существует 2 разновидности констант:

  1. Обычные (задаются программистом)
  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:


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.

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