Узнал из видео что в модуле из папки lib файлы подключаются автоматически при соблюдении условий: 1. Один файл, один класс 2. Имя файла = Ммя класса без расширения
Код
// lib/integration.php
class integration
{
public static function Init()
{
echo 'test';
}
}
Сделал как сказано на видео, но класс не подключился. Подключил принудительно в файле include.php с помощью registerAutoLoadClasses и все заработало.
W W, я как раз и не хочу заморачиваться, я хочу понять как это должно работать, если это вообще работает. А для принудительного подключения классов registerAutoLoadClasses более чем достаточно, зачем свой писать?
Ничего не могу сказать по поводу автозагрузки из папки lib, в стандартных модулях вроде тупо пути прописаны к КАЖДОМУ файлу, как и ваш registerAutoLoadClasses тоже требует полного указания пути, что на мой взгляд очень неудобно.
Я предлагаю свой автолодер потому как это удобно, вам нужно лишь указать папку где лежит базовая папка для базового пространства, больше ничего прописывать не нужно. include.php можно сделать в 2 строчки =)
Сильно не вникал но беглый осмотр registerAutoLoadClasses говорит о том что все подключается сразу, смысл вообще этой функции тогда не ясен. Возможно я не прав, поправьте.
W W написал: А где вы нашли информацию о том что из этой папке что-то должно само подключаться?
В самом первом сообщении ссылка на видео есть. Там как раз и рассказывается про условия, которые надо соблюдать что бы классы автоматически подключались.
Алексей Сумин, заметил что для корректной работы встроенного автозагрузчика нужно чтобы иерархия каталогов внутри lib совпадала с иерархией namespace'ов.
Вот так у меня все работает:
--- lib --- --- sample.php (namespace Vendor\Module; class Sample) --- --- example.php (namespace Vendor\Module; class Example) --- --- logic --- --- --- sample.php (namespace Vendor\Module\Logic; class Sample) --- --- --- example.php (namespace Vendor\Module\Logic; class Example)
Потом просто в любом месте пишем:
Код
Loader::includeModule('your_module');
use Vendor\Module;
Module\Sample::test();
Module\Example::test();
use Vendor\Module\Logic;
Logic\Sample::test();
Logic\Example::test();
И все работает.
А если расположение файла в папке lib не соответствует иерархии в пространстве имен, то только ручками в include.php