Как подключить phpunit 8+ без автозагрузчика composer?
Осознал свои ничтожные знания в пхп, решил написать свой микрофреймворк для обучения.
Специально не использую автозагрузчик от composer.
Свой пока не написал (из-за ничтожных знаний).
Поэтому возник такой вопрос:
как подключить phpunit 8+ без автозагрузчика composer?
Да он хороший, не отказывайся. Загрузчик то только классы ищет по файлам и все. Нету в загрузчике придется require class.php... но яйца в профиль те же получатся
Там под капотом spl autoload register и полный список всех файлов ы закешированном виде, а так никакой магии
Ну, собственно, я так и делаю, через require. Просто хочу понять, как оно все работает под капотом, а не сделал это раньше, т.к. не по той дорожке пошел - начал пользоваться фреймворком. Вот так вот.
Ruslan Ruslanov, как и я :)
Под капотом оно при первой попытке обратиться к классу ищет в папке файл. Это делает функция spl_autoload_register. Они используют идею, что неймспейсы отражают путь к файлу. А относительный путь - задается вручную. Типа если у тебя папка /app/vasia/hello, а неймспейс App/Hello, то нужно указать что App/Hello начинается в папке /app/vasia.
Чтобы делать это быстрее, ты в конфиге пишешь кусок namespace и указываешь папку где он лежит, а затем выполняешь команду composer dump-autoload -o, и он очень приземленно и тупо строит массив где ключи это классы, значения - это файлы.
И следующий раз уже не ищет по папкам где там как там, а просто из массива достает.
Честно говоря на автолодинге классов можно прикрутить еще две очень важные штуки - во первых иньекция зависимостей - тот самый DependencyInjector, чтобы в конструктор класса подсовывались аргументы которых там нет, и еще более прикольная штука - EventDispatcher, которая при попытке создать класс не просто создает его, а создает декорированную версию без функций, и при обращении к функции вызывает метод __call() который смотрит находится ли метод в конфиге. Если да - оно может событием стрелять до и после.
К сожалению эти фичи не реализованы в композер и фреймворки делают их с нуля.