mtymek/class-dumper

创建包含多个类的单个文件,以加快应用程序引导速度。

0.4.0 2016-06-26 12:09 UTC

This package is auto-updated.

Last update: 2024-09-05 03:52:01 UTC


README

创建包含多个类的单个PHP文件,以加快应用程序引导速度。

Scrutinizer Code Quality Build Status Code Coverage Latest Stable Version Total Downloads License

使用方法

命令行脚本

首先,创建一个配置文件,列出您想要合并的所有文件。您无需担心类的顺序,也无需添加所需的接口或父类 - 它们将被自动添加到合并文件中。

配置文件是一个简单的PHP文件,返回类名数组

// config/classes-to-cache.php
return [
    // ZF2 classes
    Zend\Mvc\Application::class,
    Zend\Mvc\ApplicationInterface::class,
    Zend\EventManager\EventsCapableInterface::class,
   
    // custom classes
    Foo\Application::class,
    Foo\Listener\Auth::class    
]

接下来,使用dump-classes.php脚本生成缓存文件

php ./vendor/bin/dump-classes.php config/classes-to-cache.php data/cache/classes.php.cache

当类缓存生成后,您可以在应用程序入口点中包含它

// index.php
include 'vendor/autoload.php';
include 'data/cache/classes.php.cache';

您可以通过将composer的安装后和更新后钩子添加到composer.json文件中来自动化生成

{
    "scripts": {
        "post-install-cmd": [
            "php ./vendor/bin/dump-classes.php config/classes-to-cache.php data/cache/classes.php.cache-raw",
        ],
        "post-update-cmd": [
            "php ./vendor/bin/dump-classes.php config/classes-to-cache.php data/cache/classes.php.cache-raw",
        ]
    }
}

PHP

或者,您可以在PHP脚本中生成缓存的类文件

$dumper = new ClassDumper();
$cache = $dumper->dump([
    Foo::class,
    Bar::class,
]);
file_put_contents('data/cache/class_cache', "<?php\n" . $cache);

压缩合并文件

ClassDumper可以通过删除所有空白和注释来减小输出文件的大小。

您可以通过添加--strip开关从命令行触发

php ./vendor/bin/dump-classes.php config/classes-to-cache.php classes.php.cache --strip

在PHP中使用

$cache = $dumper->dump([ /* ... */ ], true);

生成配置文件

您可以根据应用程序当前包含的文件轻松生成配置文件。为此,请在您的应用程序引导后添加以下行(理想情况下在路由开始之前)

$configGenerator = new \ClassDumper\ConfigGenerator;
$configGenerator->dumpIncludedClasses('config.php');

这会将所有包含的类的列表保存到config.php文件中。您可能需要在将其用于应用程序之前手动编辑配置文件 - 请参阅下面的“限制”部分。创建配置文件后,请删除上述行。

限制

并非所有类都可以使用Class Dumper进行缓存。

  • 类转储将结束在合并类不同的目录中。使用像__DIR____FILE__这样的常量的类可能无法正常工作。
  • 当使用"--strip"选项时,所有注释(包括注释)将被删除。这将阻止注释解析器在缓存类上工作。

待办事项

  • 当类不存在时抛出异常
  • 如果类包含__DIR____FILE__常量则发出警告
  • 输出/日志统计信息
  • 修复__DIR__常量