ali*_*lik 2 php autoload composer-php
PHP 7.1 应用程序使用 composer 的自动加载器来查找类定义。命名空间映射在composer.json文件中定义。
该应用程序还使用 ICU 模块的ResourceBundle类从*.res文件加载可本地化的文本。每个具有可本地化文本的类都有自己的一组*.res文件(每种语言一个文件)。提供本地化支持的代码获取应加载其文本的类的完全限定名称。
我想让这些*.res文件位于它们各自的类文件旁边(或在子文件夹中,例如/locale/)。为此,如果我能以某种方式获取类文件路径而无需在 Composer 的自动加载器中重新实现现有代码,我将表示欢迎。
理想情况下,我应该能够获取路径,而无需实例化类并以某种方式获取其文件位置。
这种方法可行吗?你有什么建议?
是的,有可能, require'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);
Run Code Online (Sandbox Code Playgroud)
输出:
string(64) "/home/user/src/app/vendor/monolog/monolog/src/Monolog/Logger.php"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |