addvilz/autoload_patcher

在自动加载之前修补任何类文件

v1.0.0 2016-02-10 14:01 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:04:00 UTC


README

此库的目的

此库的目的是在运行时修补类文件的源代码。

有些情况下,您需要修改第三方代码的功能,但无法替换或扩展它(例如,来自其他第三方代码的静态调用是一个很好的例子)。

此库允许您替换、增强或以其他方式更改原始源代码,并在之后对其进行评估。

安装

composer require addvilz/autoload_patcher

示例用法

$loader = require 'vendor/autoload.php';
$patcher = new \Addvilz\AutoloadPatcher\Patcher($loader);
$patcher
    ->register()
    ->addPatcher('Some\Vendor\UtilityClass', function ($code) {
    
        // Let's rename the class
        $code = str_replace(
            'class UtilityClass',
            'class VendorUtilityClass',
            $code
        );
        
        // ... More modification here, runtime code generation, etc.
        
        return $code;
    });

它是如何工作的?

Patcher->register() 方法调用将自动加载回调追加到自动加载堆栈中。这意味着,所有类加载将通过 Patcher 实例进行代理,如果已注册给定类的修补程序回调,它将针对由 Composer ClassLoader 类确定的文件中的源代码执行。

注意:在将类源代码传递给回调函数之前,将删除 PHP 标签!

注意:修补程序回调函数返回的任何内容都将传递给 eval()

许可

在 Apache 2.0 许可证的条款和条件下授权。