Php константы в классе

Php константы в классе

Константы также могут быть объявлены и в пределах одного класса. Отличие переменных и констант состоит в том, что при объявлении последних или при обращении к ним не используется символ $ .

Значение должно быть неизменяемым выражением, не (к примеру) переменной, свойством, результатом математической операции или вызовом функции.

Интерфейсы также могут содержать константы (constants). За примерами обращайтесь к разделу об интерфейсах.

Начиная с версии PHP 5.3.0, стало возможным обратиться к классу с помощью переменной. Значение переменной не должно быть ключевым словом (например, self, parent или static).

Пример #1 Объявление и использование константы

class MyClass
<
const CONSTANT = ‘значение константы’ ;

function showConstant () <
echo self :: CONSTANT . "
" ;
>
>

echo MyClass :: CONSTANT . "
" ;

$classname = "MyClass" ;
echo $classname :: CONSTANT . "
" ; // начиная с версии PHP 5.3.0

$class = new MyClass ();
$class -> showConstant ();

echo $class :: CONSTANT . "
" ; // начиная с версии PHP 5.3.0
?>

Пример #2 Пример со статичными данными

В отличие от heredoc, nowdoc может быть использован в любом контексте статичных данных.

Поддержка nowdoc была добавлена в версии PHP 5.3.0.

Внутри классов можно определять свои константы. Для этого используется слово const .

По сложившейся традиции имена констант задаются большими буквами.

Пример указания констант в классе

Вот пример класса с тремя константами:

Обратите внимание, перед именем константы мы не ставили знак $ , этим константы отличаются от обычных свойств.

Также обратите внимание, что мы получили доступ к этой константе используя ключевое слово self и оператор " :: ".

Попытка обратиться к константе используя псевдопеременную $this , то есть таким образом $this->BOOKS , приведёт к ошибке.

Читайте также:  Как отличить нихром от нержавейки

В данном примере при помощи этой переменной не получится обратиться даже к обычному свойству:

Получаем сообщение "Using $this when not in object context in . ". Так и должно быть, так как мы обратились к методу класса напрямую, не создавая объект, а $this работает только в контексте объекта.

Ещё раз: ключевое слово self предназначено только для обращения к константе из метода класса. Оно является аналогом псевдопеременной $this для доступа к свойствам.

Константы недоступны объектам. Это лекго понять на следующем примере.

В нашем объекте есть только свойтво $age . Констант в нём нет.

Объект состоит только из свойств, также используя его можно получить доступ к методам. Если добавить в класс метод, то в print_r() мы это не увидим.

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

Константы в PHP — это «постоянные», значения которых указывается всего один раз и затем не может быть изменено. При попытке изменить значение, оно не изменится и появится PHP заметка: «Constant already defined» (константа уже определена):

Объявлять константы в PHP можно двумя способами:

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

Как создавать константы

PHP меньше 5.3

До 5.3 в PHP, константы можно было определять только через define() . Ключевое слово const появилось с версии 5.3.

Константы могут хранить только скаляры. Скалярные переменные — это переменные с типами integer , float , string и boolean . Типы array , object и resource не являются скалярными.

С версии PHP 5.3

Появилось ключевое слово const и теперь константу можно определять еще и с помощью него.

Читайте также:  Что такое копирование приостановлено

Однако, в const нельзя указать переменную, функцию или какое то выражение, а нужно передавать скаляр «напрямую»:

Тогда как для define() таких ограничений нет.

PHP 5.6

Стало возможным указывать в значения const примитивные PHP выражения (выражения из скаляров):

Стало возможным хранить массивы в константах:

Разница между define() и const

#1 const должны быть объявлены в верхней области

В отличие define() , const должны быть объявлены в самой верхней области видимости, потому что они определяются при компилировании скрипта. Это значит, что их нельзя объявлять внутри функций/циклов/выражений if или try/catch блоков.

#2 const всегда регистрозависима

const всегда регистро-зависима, в то время как define() позволяет сделать регистро-независимые константы:

#3 const понимает только скаляры

Это справедливо только для версий PHP 5.6 и ниже.

const нельзя передать переменные, функции, выражения, а define() можно:

#4 const может хранить массивы с версии PHP 5.6 а define с PHP 7.0

Итоги сравнения

Определять константу почти всегда лучше с помощью define() , потому что тут больше возможностей и меньше вариантов «поймать» ошибку. Исключение — это когда у вас версия PHP 5.6 и вам нужно сохранить массив в константу, тут поможет const .

Константы PHP класса

Объявляются только с помощью const . Правила для них такие как описано выше: принимают только скаляры, не понимают PHP переменные, функции, выражения.

Постоянные класса всегда общедоступны — нет статуса private или protected .

Объявленная константа принадлежит именно классу, она не принадлежит ни одному объекту и является общей на все объекты (экземпляры) класса.

Константы для классов очень похожи на статические (static) свойства класса.

И в заключении вспомним про особые константы PHP.

Читайте также:  Что нужно для шитья на швейной машинке

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

Ссылка на основную публикацию
Pci ven 8086 dev 5912 subsys 59121849
Код устройства: PCIVEN_8086&DEV_5912 Выберите драйвер для своей операционной системы и ее разрядности. Рекомендуется устанавливать более позднюю версию драйвера (смотрите на...
Openwrt список поддерживаемых устройств
User Tools Site Tools Общие требования при использование Lede DO NOT BUY DEVICES WITH 4MB FLASH / 32MB RAM if...
Opera поддержка windows xp
«Хрюша» — довольно-таки старая версия Виндовс, от поддержки которой отказалась не только корпорация Microsoft, но и многие разработчики софта. Но...
Pci ven 8086 dev 8c31 subsys 8c311849
Характеристики Результат проверки: Полная совместимость Описание и инструкции Драйвер PCIVEN_8086&DEV_8C31&REV_05 для Intel USB 3.0 eXtensible Host Controller (или Intel 8...
Adblock detector