@hackimov смотрел? тебя по этому вопросу завалили на одном собесе
Посмотрел. Есть несколько вопросов: 1. Зачем использовать spl_autoload_register (речь про callable в 1 аргументе), если в тем же успехом можно сделать свою функцию обработчик который будет принимать путь с нейспейсом и в нём делать require_once? 2. Раз уж если мы все используем композер то у меня есть проблема с файлом autoload_classmap.php а) он является слишком жирным б) чтобы подключить один из классов нужно прочесть весь жирный файл.
1. ну напиши свой composer чтобы такой же удобный но быстрее, вон в мире ноды только и успевают что новые пакетные менеджеры клепать, чем php хуже 2. ну тут извини, или шашечки или ехать, давно писал крупные проекты без composer?
То есть по сути, мне нужно как то унифицировать автолоад таким образом, чтобы он грузил только те файлы, которые были использованы при выполнении того или иного вызова PHP файла. пример: Вызов роута -> просмотр зависимостей-> формирования автолод classmap именно для этого файла в рамках вызова роута, его кэширование, и при повторном запуске брать нужный автолоад классмап именно в рамках данного роута. Как такое называется?
Я не про композер, а именно про функцию PHP spl_autoload_register. Я не понимаю почему именно её надо использовать? разве нет других путей подключения классов?
если я тебя правильно понял то как раз таки эта функция и позволяет тебе сделать хоть тонну разных авто загрузчиков, тогда как раньше можно было только один __autoload() иметь https://www.php.net/manual/ru/function.spl-autoload-register.php
Вы правильно поняли. Функция spl_autoload_register() ставит в очередь вашу функцию автозагрузки. Затем, когда PHP встретит неизвестное имя класса, он будет вызывать все функции автозагрузки по очереди, пока одна из них не найдет этот класс.
Спасибо, полезное разъяснение
Есть ли варианты реализации структурной декомпозиции autoload_classmap? Под декомпозицией я имею в виду усеченные файлы того же типа содержимого, в рамках вызова того или иного метода? Пример: Предположим что вызывается метод hello из класса Connect, в use которого есть только GuzzleHttp который используется и выполняет запрос на удаленный сервер возвращая результат и больше ничего. На метод Connect@hello есть соответствующий роут. Возможно ли как то сделать так, чтобы по конкретному роуту не приходилось грузить ~8000 строк кода из autoload_classmap.php, что бы сделать загрузку всего лишь одного класса, путь к которому там прописан? То есть каким то образом реализовать декомпозицию autoload_classmap по роутам.
Можно все, вопрос в том, зачем это делать? Похоже на экономию на спичках. Если вас уж так напрягает бутстрап приложения, то завершите его в свуле или что-то подобное. Главное Стейт в сервисах не храните, да ;)
Ещё надо помнить, что кроме самого газзла надо загрузить сам класс контроллера, роутера, который отправит запрос в ваш контроллер, классы для реквеста и респонса, валидаторт какойто, сериализатор респонса и ещё половину вашего фреймворка. А сэкономите ли вы что либо на своих махинациях - вопрос спорный
у вас непонимание, что такое use, Александр
а) он является слишком жирным - так не тяни в проект всякую бяку )) А без композера ты бы все это через include подгружал. И вот тут бы был ад с ручным отслеживанием зависимостей...
Обсуждают сегодня