Yandex Metrika
sanches.free 1 просмотр

Легаси-автозагрузка по мотивам 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 дней гарантии