Константы
Константа — это имя для значения, которое не меняется во время работы программы: ставка налога, название сайта, число дней в неделе. В отличие от переменной, константу нельзя переопределить по ошибке.
Объявление
Константу объявляют словом const. Знак $ перед именем не ставят:
<?php
const SITE_NAME = 'Мой блог';
echo SITE_NAME; // Мой блогИмена констант принято писать заглавными буквами, разделяя слова подчёркиванием.
Константу нельзя изменить
Попытка присвоить константе новое значение — ошибка ещё до запуска программы. Значение вычисляют один раз, при объявлении:
<?php
const PRICE = 200;
const TAX = PRICE * 0.2;
echo PRICE + TAX; // 240В значении константы можно использовать числа, строки, массивы и другие константы.
Зачем нужны константы
Число без названия посреди кода называют «магическим»: непонятно, что оно означает. Константа даёт ему имя и хранит его в одном месте:
<?php
const MAX_LOGIN_ATTEMPTS = 3;
$attempts = 4;
if ($attempts > MAX_LOGIN_ATTEMPTS) {
echo 'Слишком много попыток';
}Если правило изменится, поправить придётся одну строку.
Функция define
Константу можно создать и функцией define(). Она работает во время выполнения, поэтому подходит там, где имя или значение заранее неизвестны:
<?php
define('APP_MODE', 'dev');
echo APP_MODE; // dev
echo defined('APP_MODE') ? ' есть' : ' нет'; // естьФункция defined() проверяет, существует ли константа. В обычном коде предпочитайте const.
Встроенные константы
В PHP много готовых констант:
<?php
echo PHP_INT_MAX, "\n"; // 9223372036854775807
echo M_PI, "\n"; // 3.1415926535898
echo PHP_EOL === "\n" || PHP_EOL === "\r\n" ? 'перевод строки' : '';PHP_EOL — перевод строки для текущей системы, PHP_VERSION — версия PHP.
Волшебные константы
Их значения зависят от места в коде. Они начинаются и заканчиваются двумя подчёркиваниями:
<?php
function whoAmI()
{
return __FUNCTION__;
}
echo whoAmI(), "\n"; // whoAmI
echo __LINE__; // 9__DIR__ содержит папку текущего файла — с её помощью строят пути к соседним файлам.
Частая ошибка
Константы не подставляются в строку в двойных кавычках — там PHP ищет только переменные:
<?php
const CITY = 'Казань';
echo "Город: CITY", "\n"; // Город: CITY
echo 'Город: ' . CITY; // Город: КазаньСклеивайте константу со строкой оператором ..