避免作曲家的autoload.php解析所有文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了避免作曲家的autoload.php解析所有文件相关的知识,希望对你有一定的参考价值。
这是我的问题:我已经将复杂的应用程序升级到php 7.4,是的,我没有进行充分的测试。
现在,我想使用较旧的PHP版本在任务上运行,但是它无法解析我的所有供应商文件。这是错误和行。这是PHP 7.4的新功能。
PHP解析错误:语法错误,意外的'?',期望第25行的。 vendor sentry sentry src functions.php中的变量(T_VARIABLE)
function captureMessage(string $message, ?Severity $level = null): ?string
直到现在我还认为,作曲家vendorautoload.php
仅在需要时才在供应商目录中加载类和函数。未使用的类,因此不会加载用PHP 7.4编写的有问题的文件。
[不幸的是,我注意到,require_once('./vendor/autoload.php')
足以看到解析错误。是否可以以某种方式配置Composer,使其不预加载供应商文件,而是仅在请求类或函数后才加载它们?
您最初的假设是正确的:通常,PHP自动加载器仅在使用类时才加载类,而Composer只是提供了该自动加载器的实现。
但是,Composer也包含a feature to unconditionally load a file。当软件包包含无法按需加载的函数,常量或配置时使用(因为PHP的自动加载器仅处理类)。
您正在使用的一个软件包使用此功能,因此,每次包含vendor/autoload.php
时,都需要它指定的文件。在显示的错误消息中,我们可以看到程序包名称sentry/sentry
,在that package's composer.json
中,我们可以看到此信息:
composer.json
解决此问题的最佳方法可能是降级此依赖关系,以及任何其他仅包含在PHP 7.4下运行的代码。为此,您只需在较早版本的PHP上重新运行"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Sentry\": "src/"
}
},
,它将仅拾取支持该版本的软件包。
您还可以在composer update
中指定the platform
option以始终请求较早版本的PHP依赖,即使您在PHP 7.4下运行Composer时也是如此。但是,存在产生的依赖项与PHP 7.4不兼容的风险。
在您的composer.json中,您可以将platform
添加到您的配置中,以强制其将依赖关系解析为特定版本的PHP。
composer.json
platform
以上是关于避免作曲家的autoload.php解析所有文件的主要内容,如果未能解决你的问题,请参考以下文章