PHP 7.1应用程序使用composer的自动加载器来查找类定义。命名空间映射在composer.json
文件中定义。
该应用程序还使用ICU模块的ResourceBundle
类从*.res
文件加载可本地化的文本。每个具有可本地化文本的类都有自己的*.res
文件集(每种语言一个文件)。提供本地化支持的代码获取应加载其文本的类的完全限定名称。
我希望*.res
文件位于各自的类文件旁边(或者在子文件夹中,例如/locale/
)。为此我欢迎,如果我能以某种方式获得类文件路径,而无需重新实现作曲家的自动加载器中的现有代码。
理想情况下,我应该能够在不需要实例化类并以某种方式获取其文件位置的情况下获取路径。
这种方法可行吗?你有什么建议?
答案 0 :(得分:2)
是的,有可能,'vendor/autoload.php'
实际上会返回一个自动加载器实例:
/* @var $loader \Composer\Autoload\ClassLoader */
$loader = require 'vendor/autoload.php';
$class = \Monolog\Logger::class;
$loggerPath = $loader->findFile($class);
if (false === $loggerPath) {
throw new \RuntimeException("Cannot find file for class '$class'");
}
$realLoggerPath = realpath($loggerPath);
if (false === $realLoggerPath) {
throw new \RuntimeException("File '$loggerPath' found for class '$class' does not exists");
}
var_dump($realLoggerPath);
输出:
string(64) "/home/user/src/app/vendor/monolog/monolog/src/Monolog/Logger.php"