Как стать автором
Обновить

Комментарии 11

вы изобрели spl_autoload_register
spl_autoload_register(function ($class) {
    $path = strtr($_SERVER["DOCUMENT_ROOT"] . "/local/src/" . $class . ".php", '_\\', '//');
    if (file_exists($path))
        require_once $path;
});
Guronn, спасибо за содержательный комментарий ))

И да, про spl_autoload_register я тоже знаю, просто забыл его упомянуть в статье ))
я к тому что это заменяет весь модуль, в том числе рекурсивный scanDirectory, т.к. класс вызывается по namespase\class_name оно и будет путем, и без namespace тоже работает.
use Foo\Bar;
new Bar()

Т.к. вы вставляете код в init.php и используете модуль, можно обойтись кодом выше. будет 100% тоже самое но без кода
НЛО прилетело и опубликовало эту надпись здесь

marvin255, спасибо за адекватный и развёрнутый комментарий!


Про генератор модулей краем уха где-то слышал, но не сталкивался, не поделитесь ссылкой?

Composer. Позволяет подключать как собственные классы, так и сторонние библиотеки. Однако при добавлении новых классов требует ручного обновления.

Чтобы создать таблицу классов и не перечитывать всю папку vendor при каждом запросе… Велосипед на уровне «за что».

Битрикс с композером в принципе не особо дружит, почитайте документацию, приходится через какие-то странные телодвижения его подключать.

Читал, и даже подключал… Битрикс в принципе весь — сборник костылей к велосипедам, композер туда хоть какой-то порядок добавлял. И чёт, если моя память мне ни с кем не изменяет, не надо там каждый раз вручную всё перегенерировать, а только при создании нового неймспейса, либо для оптимизации автолоадера. Но в итоге это добро работать будет в любом случае эффективнее собственного велосипеда.
А как же PSR-4? Для этого достаточно в Composer.json указать namespace, а классы просто уже складывать в нужном месте. Я как-то прикручивал роутер и контроллер от симфони к битриксу. Достаточно в том же composer.json в секции автозагрузки скормить битриксовый пролог, чтоб подгружалось и ядро битрикса. И ничего, получилось довольно сносно, получился полноценный контроллер, роутер, и вьюхи. Без всякой этой мышиной возни с компонентами и прочим…
таким образом у нас на каждом хите будет сканироваться директория?
Не очень хорошее, на мой взгляд, решение. Ну т.е. обрекаем сайт на пожизненный скан на каждом хите. Даже если разработка давно уже закончена.
Если классов мало, то одну строку в массив для битриксного автолоадера засунуть не слишком тяжело
Если классов много, то компосер хороший вариант — команду дал и все быстро работает.

Уж если делать такой модуль, то тогда уж с опцией режим разработки/режим прода… В режиме разработки — массив пишем в файл, в режиме прода — только читаем.

По модулям согласен: модуль только ради подключения классов (не объединенных определенной задачей). не очень хороший вариант. Тем более пока не сделали возможность именования файлов не только в нижнем регистре.

А про массив для битриксного загрузчика, я сейчас пришел к варианту передвать в ключ в ином виде:
$classes = [
    Namespace\Package\ClassName::class => '/path/to/class.php'
];

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

Поэтому спасибо за указанные слабые места, уважаемые комментаторы, действительно, лучше всё-таки использовать для этих целей Composer
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации