<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Константы в PHP: define, const и магические константы на практике

Константы в PHP: define, const и магические константы на практике

Поисковый запрос, под который написана эта статья: константы в PHP define const. Тема кажется простой, но именно из-за неправильного использования констант в проектах часто появляются «магические числа», дублирование настроек и трудноуловимые ошибки.

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

Константа — это именованное значение, которое задаётся один раз и не меняется в процессе работы скрипта. В отличие от переменной, перед именем константы не ставится символ $.

<?php
const SITE_NAME = 'My Blog';

echo SITE_NAME; // My Blog

Константы удобно использовать для значений, которые должны быть одинаковыми во многих частях приложения:

  • название сайта;
  • пути к папкам;
  • роли пользователей;
  • лимиты пагинации;
  • настройки режимов работы.

define() и const: в чём разница

В PHP есть два основных способа объявить константу: функция define() и ключевое слово const.

<?php
define('APP_VERSION', '1.0.0');
const DEFAULT_LIMIT = 20;

echo APP_VERSION;
echo DEFAULT_LIMIT;

Главное отличие: const объявляется на этапе компиляции, а define() выполняется во время работы программы. Поэтому define() можно использовать в условиях, а const — нет.

<?php
$debug = true;

if ($debug) {
    define('LOG_LEVEL', 'debug');
} else {
    define('LOG_LEVEL', 'error');
}

echo LOG_LEVEL;

А такой код с const будет некорректным:

<?php
if (true) {
    const MODE = 'dev'; // ошибка: const нельзя объявлять внутри обычного if
}

Когда использовать const, а когда define()

Практическое правило:

  • const используйте по умолчанию для обычных констант в файлах, классах и интерфейсах;
  • define() используйте, если имя или значение константы нужно определить динамически;
  • для конфигурации большого приложения чаще лучше использовать массивы, .env или отдельные config-файлы, а не десятки глобальных констант.

Пример с динамическим именем через define():

<?php
$role = 'ADMIN';
define('ROLE_' . $role, 'administrator');

echo ROLE_ADMIN; // administrator

Константы в классах

В PHP константы часто объявляют внутри классов. Это хороший способ сгруппировать связанные значения и не засорять глобальное пространство имён.

<?php
class UserRole
{
    public const ADMIN = 'admin';
    public const MANAGER = 'manager';
    public const GUEST = 'guest';
}

echo UserRole::ADMIN;

Такой подход удобнее, чем хранить роли строками по всему проекту:

<?php
function canDeletePost(string $role): bool
{
    return $role === UserRole::ADMIN;
}

var_dump(canDeletePost('admin')); // true

Если позже значение роли изменится, вам не придётся искать строку 'admin' во всём проекте — достаточно изменить константу в одном месте.

Типизированные константы классов в PHP

В современных версиях PHP можно указывать тип для констант классов. Это делает код понятнее и снижает риск случайной ошибки.

<?php
class Pagination
{
    public const int DEFAULT_LIMIT = 20;
    public const int MAX_LIMIT = 100;
}

echo Pagination::DEFAULT_LIMIT;

Если вы хотите уверенно разбираться не только в константах, но и в ООП, базах данных, авторизации и создании реальных сайтов, полезно пройти практический курс по PHP и MySQL от основ до уверенной разработки.

Магические константы PHP

В PHP есть специальные встроенные константы, значение которых зависит от места использования. Их называют магическими константами.

<?php
echo __FILE__; // полный путь к текущему файлу
echo __DIR__;  // папка текущего файла
echo __LINE__; // номер текущей строки

Самые полезные магические константы:

  • __FILE__ — полный путь к файлу;
  • __DIR__ — папка файла;
  • __LINE__ — номер строки;
  • __FUNCTION__ — имя функции;
  • __CLASS__ — имя класса;
  • __METHOD__ — имя метода класса.

Например, __DIR__ часто используют для подключения файлов без зависимости от текущей рабочей директории:

<?php
require __DIR__ . '/config.php';
require __DIR__ . '/functions.php';

Это надёжнее, чем относительный путь без __DIR__, потому что скрипт может быть запущен из другой папки.

Практический пример: настройки приложения

Допустим, у нас есть простой файл настроек. Часть значений можно вынести в константы:

<?php
const APP_NAME = 'Task Manager';
const APP_ENV = 'local';
const ITEMS_PER_PAGE = 10;
const STORAGE_PATH = __DIR__ . '/storage';

function isLocal(): bool
{
    return APP_ENV === 'local';
}

if (isLocal()) {
    echo 'Приложение запущено в режиме разработки';
}

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

Как проверить, существует ли константа

Для проверки используйте функцию defined(). Это особенно полезно, если константа может объявляться условно.

<?php
if (!defined('APP_VERSION')) {
    define('APP_VERSION', '1.0.0');
}

echo APP_VERSION;

Не путайте defined() с isset(). Функция isset() работает с переменными, а не с константами.

Частые ошибки новичков

  • Ставят $ перед константой. Правильно: APP_NAME, неправильно: $APP_NAME.
  • Переопределяют константу. Обычную константу нельзя объявить повторно с другим значением.
  • Хранят в константах всё подряд. Если значение меняется в зависимости от пользователя или запроса, это должна быть переменная.
  • Используют глобальные константы без необходимости. Для связанных значений часто лучше подходят константы классов.
  • Пишут «магические числа» в коде. Например, число 100 лучше заменить на понятную константу MAX_LIMIT.

Рекомендации по именованию

В PHP для глобальных констант обычно используют верхний регистр и подчёркивания:

<?php
const MAX_UPLOAD_SIZE = 5 * 1024 * 1024;
const DEFAULT_LANGUAGE = 'ru';
const CACHE_TTL_SECONDS = 3600;

Название должно объяснять смысл значения. Константа LIMIT хуже, чем PRODUCTS_PER_PAGE, потому что второе имя сразу говорит, где и зачем используется значение.

Короткий вывод

Константы в PHP делают код понятнее, безопаснее и удобнее для поддержки. Используйте const для обычных неизменяемых значений, define() — когда объявление должно происходить динамически, а магические константы — для путей, отладки и служебной информации. Главное — не превращать константы в свалку настроек и давать им понятные имена.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.