Автозагрузка классов

Автозагрузка классов (autoloading) помогает системе автоматически находить и загружать необходимые классы. Это позволяет не подключать файлы вручную.

Подключить модули

Метод includeModule() подключает указанный модуль и файлы автозагрузки: include.php и /lib/autoload.php. Чтобы использовать классы, модуль должен быть установлен в системе. Только после успешного вызова includeModule() классы модуля становятся доступны для автозагрузки.

// Подключим модуль CRM, который уже установлен в системе
        if (\Bitrix\Main\Loader::includeModule('crm')) {
            // Теперь можно работать с классами CRM
        }
        else {
            // Обработка случая, когда модуль недоступен
            throw new \Exception('Модуль CRM не установлен');
        }
        

Метод возвращает значение:

  • true — если модуль подключен,

  • false — модуль не найден или ошибка.

Зарегистрировать класс для автозагрузки

Регистрируйте для автозагрузки классы, которые используются в большинстве сценариев, например, классы для работы с базой данных или обработки запросов. Это избавит систему от повторного поиска файлов. Классы для узких задач можно не регистрировать — они загрузятся автоматически при первом обращении.

Добавить классы в автозагрузку можно в файле /local/modules/[ваш_модуль]/include.php, который система автоматически подключает при первом обращении к модулю.

/local/modules/mymodule/
            ├── include.php    // регистрируйте классы в файле include.php
            ├── lib/           // основные классы в папке lib
            │   └── main.php
            └── classes/      // дополнительные классы в папке classes
                └── tools
        

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

Зарегистрировать класс можно методом Loader::registerAutoLoadClasses.

// В файле /local/modules/mymodule/include.php
        \Bitrix\Main\Loader::registerAutoLoadClasses(
            'mymodule', // Имя вашего модуля
            [
                // Класс => относительный путь от папки модуля
                'MyModule\Main' => 'lib/main.php',
                'MyModule\Tools' => 'classes/tools.php',
            ]
        );
        

Зарегистрировать пространство имен по PSR-4

PSR-4 — стандарт автозагрузки:

  • где каждый \ в пространстве имен соответствует папке,

  • имя класса должно совпадать с именем файла.

Добавляйте пространства имен для автозагрузки в файл /local/modules/[ваш_модуль]/include.php или в другие файлы, до первого обращения к классам из этого пространства. Файл include.php подключается при вызове includeModule() для вашего модуля.

Зарегистрировать пространство имен можно методом Loader::registerNamespace.

\Bitrix\Main\Loader::registerNamespace(
            "MyCompany\MyModule",  // Пространство имен
            "/local/modules/mymodule/lib"  // Путь к классам. Можно указывать несколько путей
        );
        

Как работает поиск класса

  1. Система проверяет, зарегистрирован ли класс для автозагрузки.

  2. Если нет — ищет файл по PSR-4.

  3. Если класс не найден — возвращает ошибку.

Автозагрузка через Composer

Composer — стандартный менеджер зависимостей для PHP, который позволяет управлять библиотеками и их версиями. В Bitrix Framework он используется для управления сторонними библиотеками и их автоматической загрузки.

Подробнее в статье Composer.