目录

PHP通过(知道)命名空间获取类(文件)绝对路径

目录

在PHP开发中,如果为了高效(偷懒)都会通过脚本去实现一些事情, 但最近遇到一个问题我知道一个文件的命名空间想解析出它的文件绝对路径怎么办?

PHP神器 Composer

现代 phper 开发都会用到的 composer 就是神器 通过 composer dump-autoload -o 解析路径 会发现 vendor/composer/autoload_psr4.php里面就解析出来了所有加载的命名空间和绝对路径 例:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'phpseclib3\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
    'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'),
    'Zxing\\' => array($vendorDir . '/khanamiryan/qrcode-detector-decoder/lib'),
    'Zipkin\\' => array($vendorDir . '/openzipkin/zipkin/src/Zipkin'),
    'ZipkinOpenTracing\\' => array($vendorDir . '/jcchavezs/zipkin-opentracing/src/ZipkinOpenTracing'),
    'Yansongda\\Supports\\' => array($vendorDir . '/yansongda/supports/src'),
    'Yansongda\\Pay\\' => array($vendorDir . '/yansongda/pay/src'),
    'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),

于是 通过 require 加载该文件就可以读取到

$loader = require BASE_PATH . '/vendor/composer/autoload_psr4.php';

同时 在 vendor/composer/ 下的其他文件也可以用到

├── ClassLoader.php
├── InstalledVersions.php
├── LICENSE
├── autoload_classmap.php
├── autoload_files.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── installed.json
├── installed.php

具体玩法自行研究