jesseschalken/autoload-generator

为PHP项目生成基于类映射的include/autoload文件,支持函数和常量。

0.2.3 2016-12-09 01:47 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:15:00 UTC


README

为PHP项目生成基于类映射的autoload加载器,支持函数和常量。

使用方法

  1. 包含composer包

    php composer.phar require --dev jesseschalken/autoload-generator
    
  2. 运行 ./vendor/bin/php-generate-autoload <outfile> [<files>...]

    例如,如果你的项目所有源文件都在src/目录下,你可以这样做

    ./vendor/bin/php-generate-autoload src/autoload.php
    

    然后使用src/autoload.php作为项目的入口点。

    查看./vendor/bin/php-generate-autoload --help获取更多信息。

  3. 如果适用,更新composer.json以指向你的autoload加载器。例如

    "autoload": {
        "files": ["src/autoload.php"]
    }
    

工作原理

php-generate-autoload使用nikic/PHP-Parser解析所有PHP文件,并创建一个从类名到文件路径的映射,用于在spl_autoload_register()注册的autoload加载器中。包含全局函数或常量定义的任何文件都将直接包含在内。

例如,考虑一个包含三个文件的项目:src/Foo.phpsrc/Bar.phpsrc/lots of classes.php包含类,src/functions.php包含函数,src/constants.php包含常量。

运行后

./vendor/bin/php-generate-autoload src/autoload.php

src/autoload.php将包含类似的内容

<?php

spl_autoload_register(function ($class) {
  static $map = array (
  'Project\\Foo' => 'Foo.php',
  'Project\\Bar' => 'Bar.php',
  'Project\\Class1' => 'lots of classes.php',
  'Project\\Class2' => 'lots of classes.php',
  'Project\\Class3' => 'lots of classes.php',
);

  if (isset($map[$class])) {
    require_once __DIR__ . "/{$map[$class]}";
  }
}, true, false);

require_once __DIR__ . '/constants.php';
require_once __DIR__ . '/functions.php';