Константы в PHP. Как определить собственные и использовать магические?

константы в php. как определить собственные и использовать
  магические?

Осмысление констант

Ранее мы изучали переменные и массивы, которые служат для сохранения простой информации и повторного её использования. Хранимые в них значения могут переопределяться в процессе исполнения. Что если нам нужно установить такое значение, которое невозможно было бы изменить или удалить во время выполнения программы? Это могут быть критичные данные. Например, конфигурационные параметры, случайное изменение которых повлечет за собой непоправимые последствия. Для этих целей в PHP существуют константы.

Константа – область оперативной памяти, которая не может быть изменена или освобождена во время выполнения скрипта. Работа с константами не дает преимуществ по скорости доступа к данным, хранящимся в ней.

В целом константы очень схожи с переменными, но есть и важные отличия:

  • Есть два типа синтаксиса их определения.
  • Они не могут содержать специальное значение null.
  • Их нельзя удалить с помощью функции unset().
  • Значение определенной константы невозможно изменить.
  • Их значения можно получить из любой части скрипта.

Правила именования и создания

Как и говорилось, в PHP существует два типа синтаксиса определения констант. Ниже мы указали несколько примеров. Подробное объяснение синтаксиса следует прямо за ними.

//Первый синтаксис определения константы
define('SECURE_DATA', 'мой пароль');
echo 'Константа SECURE_DATA хранит: '. SECURE_DATA;

//Второй синтаксис определения константы
const VERY_IMPORTANT = 'очень важно';
echo 'Делайте бэкапы т.к это '. VERY_IMPORTANT;

//Константы содержащие различные типы данных
define('INTEGER_CONST', 156);
define('STRING_CONST', 'простой текст');
define('ARRAY_CONST', [ 'число' => 12, 'строка' => 'текст']);
var_dump(INTEGER_CONST, STRING_CONST, ARRAY_CONST);
/*
* Результат:
* int(156)
* string(25) "простой текст"
* array(2) {
*     ["число"]=> int(12)
*     ["строка"]=> string(10) "текст"
* }
*/

Правила создания констант:

  1. Перед именем константы недопустимо использовать знак доллара «$», что является обязательными для переменных.
  2. Имя константы может содержать любое количество букв, цифр и знаков подчеркивания. Единственное условие – оно должно начинаться только с буквы или знака подчеркивания. Если имя начинается с цифры, то программный код завершится с ошибкой.
  3. В первом типе синтаксиса, при создании константы используется ключевое слово const и оператор присваивания «=», за которым следует добавляемое значение. Во втором, создание происходит через вызов функции define() первым атрибутом которой является имя, а вторым значение.
  4. Значение, которое будет присвоено, может быть только целым или дробным числом, строкой, логическим значением или массивом.
  5. Выражение определения константы, как и любое другое, должно завершаться точкой с запятой.
  6. Существует негласное правило, что имена констант должны задаваться в верхнем регистре, а слова отделяться друг от друга нижним подчеркиванием. Вы можете ему не следовать, но это является правилом хорошего тона[1].
//Использование знака "$" в имени константы
define('$WRONG_NAME', 'плохое определение');
echo $WRONG_NAME; //Результат: пустая строка

//Имя константы начинается с цифры
const 20MY_AGE = 'мне 20 лет'; //Результат: фатальная ошибка

//Попытка переопределить константу
const SOME_TEXT = 'мой любимый цвет';
SOME_TEXT = 'желтый'; //Результат: фатальная ошибка

//Помещение Null в значение константы, не создает её
define('EMPTY_CONST', null);
if(defined(EMPTY_CONST)) {
    echo 'Константа определена';
} //Результат: Пустая строка

Функция defined(), использованная в примерах приведенных выше, при передаче ей имени константы вернет true, если она определена или false, если не определена.

Важно
Есть одна особенность объявления с помощью конструкции «const ИМЯ_КОНСТАНТЫ = значение_константы;». Такие константы могут быть объявлены только в глобальной области видимости, т.е не допускается определение внутри тела функции, условных операторов, циклов и конструкций отлавливания ошибок.

Глобальные (магические) константы

В процессе выполнения скрипта интерпретатор PHP кода создает ряд глобальных констант, именуемых магическими[2]. Они хранят в себе информацию административного характера, такую как: имя файла текущего скрипта, имя выполняемой функции, номер текущей строки кода и т.д.

Для использования магических констант не нужно выполнять особых действий или пытаться явным образом определять их через const или define(). Вам нужно просто вызвать их в любом месте своей программы.

//Примеры использования магических констант
echo 'Имя текущего файла '. __FILE__ .'<br>';
echo 'Сейчас мы на строке '. __LINE__.'<br>';

//Магическую константу невозможно переопределить
//результатом будет путь до текущего файла
define('__FILE__', 'another-file.php');
echo 'Имя текущего файла '. __FILE__;

Список основных магических констант:

  • __FILE__ - имя файла текущего скрипта.
  • __LINE__ - номер выполняемой строки кода.
  • __FUNCTION__ - имя функции, выполняемой в данный момент.
  • __CLASS__ - имя класса, используемого в данный момент.
  • __METHOD__ - имя метода класса, выполняемого в данный момент.

Термины, использованные в статье

  1. Правила хорошего тона — это устоявшийся в кругах программистов свод правил по написанию кода. Соблюдение этих правил позволяет улучшить восприятие и читаемость программного кода, написанного вами. Другим программистам будет легче вникнуть в логику программы.
  2. Магические сущности — интерпретатор помогает программистам, обрабатывая часть входящих данных. Эти данные в процессе выполнения скрипта доступны через специальные константы, суперглобальные массивы или наборы встроенных функций. Программисты негласно считают такой функционал «магией» или «магическим».

Последние публикации