Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Константы классов PHP: Введение в ООП

Напомню, что в PHP возможно определять константы. Они используются для хранения каких-то постоянных данных, которые, как правило, глобальные. Например, константа PHP_VERSION содержит версию PHP, в которой был запущен код (а его можно запустить на разных версиях интерпретатора). Эта константа относится к предопределённым (предоставляется интерпретатором). PHP позволяет создавать свои собственные константы, используя конструкцию const SEC_PER_DAY = 86400;. Эти константы принадлежат пространству имён и могут быть импортированы из него, используя конструкцию use const App\Times\SEC_PER_DAY;.

<?php

// Класс встроен в язык https://php.net/manual/ru/class.datetime.php
class DateTime
{
    // Константы могут быть как публичными так и приватными
    public const RSS = 'D, d M Y H:i:s O';
    public const RFC822 = 'D, d M y H:i:s O';
    private const SOMETHING_FOR_INTERNAL_USING = 'value';
}

Внутри классов константы определяются точно таким же способом, как и снаружи. Основное отличие проявляется в способе доступа.

<?php

print_r(DateTime::RSS); // => D, d M Y H:i:s O

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

Для констант классов нет особого синтаксиса импорта. Он не нужен по очень простой причине — импортируется в другие пространства имён всегда класс, а константа извлекается уже из него.

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


<?php

class DateTime
{
    // ...

    public function getRssFormat()
    {
        return self::RSS;
    }
}

В этом способе вместо имени класса слева стоит ключевое слово self. Его удобство заключается в отсутствии дублирования имени класса. Эта проблема особенно актуальна при активном использовании констант внутри самого класса.

Предопределённые константы

Внутри класса определено несколько магических констант:

  • __CLASS__ — текущее имя класса
  • __METHOD__ — текущее имя метода

В отличие от обычных констант, магические не требуют префикса self:: и доступны только внутри класса.

<?php

class Example
{
    public function printMethodName()
    {
        print_r(__METHOD__);
    }
}

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

<?php

namespace App;

class User
{
}

User::class; // App\User

Эта константа возвращает полное имя класса относительно пространства имён, в котором происходит её вызов.

Итого

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

В каких случаях нужно использовать константы? В ситуациях, когда с данным типом (классом) связана некоторая важная и статическая информация (то есть не меняющаяся). Для класса DateTime такими константами являются различные форматы даты, закреплённые разными стандартами. В целом константы не влияют на архитектуру приложения и вообще не относятся к ООП. Это просто удобное (в рамках ООП-модели PHP) добавление, полезное в некоторых ситуациях.


Дополнительные материалы

  1. Официальная документация

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

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

Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
29 сентября 8 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»