Composer 自动加载始终是第一位的

Tho*_*sen 2 php autoload composer-php

我在一个遗留项目中使用 Composer,该项目有很多没有命名空间的类。重构不是一个选项(它是一个非常庞大的应用程序),但所有新模块都完全符合 psr-4。遗留代码有它自己的自动加载方法(使用类映射,非常有效)。

我的问题是:无论我以何种顺序添加自动加载器方法,composer 自动加载器总是首先出现!这会减慢每个类的加载速度:每次我从遗留代码调用一个类时,它首先尝试将它与所有 Composer 自动加载选项(包括 findFileWithExtension() )进行匹配,然后才调用备用自动加载器。

我已经使用 PHPStorm+XDebug 对其进行了检查,无论我首先包含哪个自动加载器,Composer 自动加载始终在旧版自动加载器之前调用。

有没有办法改变这种行为?

提前致谢!!

Tho*_*sen 5

好的,伙计们,我找到了解决方案并想与您分享:spl_autoload_register() 函数有第三个参数:$prepend。当设置为 true 时,它​​会将自动加载函数添加到自动加载队列中,而不是附加它(它实际上记录在官方PHP 文档中)。Composer 始终将其设置为 true,以便始终首先调用其自动加载器。为了修复它,我更改了旧的自动加载器,将 $prepend 设置为 true,并在包括 composer 的自动加载之后调用它。

希望它可以帮助某人!:)