Легаси-автозагрузка по мотивам PushOrigin: CModule и php_interface
С чего начался пример
Старый текст на PushOrigin свёл идею к одному блоку без пояснений: вызвать CModule::AddAutoloadClasses и передать карту имён классов и путей к PHP‑файлам. Ниже — переписанная выжимка для реальных боевых проектов под Bitrix без копирования чужих формулировок подряд.
Что именно делает вызов
PHP подключает файл только когда вы впервые обращаетесь к классу. Ядро Битрикса для «левых» каталогов не угадывает соответствие имя → файл, поэтому карту задают явно через механизм модуля: даже если вы не пишете отдельный модуль в /local/modules/, первый параметр можно оставить пустой строкой — тогда регистрируют глобальную для установки связку классов.
Где ставить код и файлы классов
Типичный и поддерживаемый вариант — раннее подключение из /local/php_interface/init.php (или точки входа кастомного модуля, если карта живёт там). Сами классы удобно держать, например, в /local/php_interface/classes/; пути в массиве задают от корня сайта, на одном уровне с каталогами /bitrix/ и /local/.
На заметке с PushOrigin указаны вида /lib/...; в живой инсталляции чаще физически оказывается /local/php_interface/... или отдельный неймспейс‑каталог. Важнее правило: строка должна быть реальной абсолютной относительно веб‑корня, а не «от текущего файла».
Исправленный скелет кода
CModule::AddAutoloadClasses('', [
'JS' => '/local/php_interface/classes/JS.php',
'TemplateTabs' => '/local/php_interface/classes/TemplateTabs.php',
'CatalogUtils' => '/local/php_interface/classes/CatalogUtils.php',
]);В первоисточнике во второй строке ошибочно написано TeplateTabs — ключ массива дублирует опечатку и не совпадает с объявлением class TemplateTabs, поэтому автозагрузчик бесследно промахивается.
Частые ловушки
- Регистрация выполняется уже после того, где класс понадобился — получите неопределённый класс там, где казалось, что файл подключился.
- В карту добавили одно короткое имя вроде
JS, а в коде ниже класс вызывают с префиксом или неймспейсом — совпадения не будет. - Подключают разные участки через
require, а затем ещё и автозагрузку — возможны конфликты загрузчиков или двойное определение.
Связь с D7
Для полных имён вида \Vendor\..., Loader::registerAutoLoadClasses и чек‑листа на практике см. общий материал по автозагрузке классов для Битрикс.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии