Хук integrate_autoload
Хук integrate_autoload позволяет автоматически загружать классы и файлы с функциями именно в тот момент, когда они нужны для работы, без необходимости использовать громоздкие конструкции require_once вручную. Это реализация паттерна автозагрузки (autoloading) в SMF, которая делает код чище и эффективнее.
Расположение⚓︎
Во входной переменной содержится массив, где ключами являются пространства имён, а значениями — пути к файлам классов внутри директории /Sources.
Назначение⚓︎
В традиционном PHP-коде, если вам нужен какой-то класс или библиотека из другого файла, вы пишете:
Если таких классов много, код превращается в список require_once в начале каждого файла. Это неудобно и неэффективно, так как файлы загружаются, даже если переданный запрос их не использует.
Автозагрузка решает эту проблему: PHP автоматически подключает файл с классом только в тот момент, когда вы впервые пытаетесь создать объект этого класса (new MyClass) или использовать его статически (MyClass::method()).
Хук integrate_autoload нужен, чтобы сообщить движку SMF о ваших собственных классах и файлах, которые должны быть доступны для автоматической загрузки.
Вы регистрируете путь к файлу, и когда движок встречает в коде неизвестный класс, он проверяет ваши регистрации и пытается найти и подключить нужный файл.
Использование⚓︎
<?php
namespace Bugo\Optimus;
class Integration
{
// В этой функции подключаем используемые хуки
public function hooks(): void
{
add_integration_function('integrate_autoload', self::class . '::autoload#', false, __FILE__);
}
// А здесь определяем используемое пространство имён для своих классов
public function autoload(array &$classMap): void
{
$classMap['Bugo\\Optimus\\'] = 'Optimus/';
}
}
Благодаря функции выше в коде приложения при использовании пространства имён \Bugo\Optimus\ SMF будет искать нужный файл в директории /Sources/Optimus.
Данный хук обязательно пригодится при разработке приложения с пространствами имён и классами.
Хук integrate_autoload — это мощный инструмент для современной и чистой организации кода в модах и темах SMF. Он избавляет разработчика от рутины ручного подключения файлов, делает код более читаемым и соответствует современным стандартам разработки на PHP (используя автозагрузку).
См. также Автоматическая загрузка классов