Ваше первоначальное предположение было верным: в общем случае автозагрузчик PHP загружает классы только тогда, когда они используются, а Composer просто обеспечивает реализацию этого автозагрузчика.
Однако Composer также включает в себя функция для безусловной загрузки файла . Это используется, когда пакет содержит функции, константы или конфигурацию, которые не могут быть загружены по требованию (поскольку автозагрузчик PHP обрабатывает только классы).
Один из используемых вами пакетов использует эту функцию , поэтому каждый раз, когда вы включаете vendor/autoload.php
, указанный файл является обязательным. В показанном сообщении об ошибке мы видим имя пакета sentry/sentry
, а в этого пакета composer.json
мы видим это:
"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Sentry\\": "src/"
}
},
Лучший способ обойти это вероятно, чтобы понизить эту зависимость, и любые другие, которые включают код, который работает только под PHP 7.4. Для этого вы можете просто перезапустить composer update
на вашей старой версии PHP, и он будет выбирать только пакеты, поддерживающие эту версию.
Вы также можете указать platform
опция в вашем composer.json
, чтобы всегда запрашивать зависимости для более старой PHP версии, даже если вы используете Composer в PHP 7.4. Однако существует риск того, что полученные зависимости будут несовместимы с PHP 7.4.