nazonohito51/monkey-patch

PHP的Monkey patch。

0.1.0 2019-07-22 17:09 UTC

This package is auto-updated.

Last update: 2024-09-06 14:15:59 UTC


README

PHP的Monkey patch。在自动加载时转换PHP代码。(本身PHP文件将不会改变)

示例

当通过自动加载或include/require包含SomeClass(如下所示)时。

<?php
namespace SomeNamespace;

class SomeClass
{
    public function someMethod()
    {
        $client = new \GuzzleHttp\Client();
        return $client->request('GET', 'https://your.production.env.com/api/end_point');
    }
}

你可以修复PHP代码。

(new \MonkeyPatch\Patcher())->whenLoad('/path/to/src')->patchBy(new class extends \MonkeyPatch\Filters\AbstractCodeFilter {
    public function transformCode(string $code): string
    {
        // fix url.
        // 'https://your.production.env.com' -> 'https://your.test.env.com'
        return preg_replace('/https:\/\/your\.production\.env\.com/', 'https://your.test.env.com', $code);
    }
});

在这种情况下,SomeClass将被包含如下。(当然,原始的PHP文件将不会改变。)

<?php
namespace SomeNamespace;

class SomeClass
{
    public function someMethod()
    {
        $client = new \GuzzleHttp\Client();
        return $client->request('GET', 'https://your.test.env.com/api/end_point');
    }
}

用法

(new \MonkeyPatch\Patcher())->whenLoad('/path/to/src')->patchBy(new class extends \MonkeyPatch\Filters\AbstractCodeFilter {
    public function transformCode(string $code): string
    {
        // fix $code by your logic.
        return $code;
    }
});

如果你要使用php-parser,请使用AbstractAstFilter。

(new \MonkeyPatch\Patcher())->whenLoad('/path/to/src')->patchBy(new class extends \MonkeyPatch\Filters\AbstractAstFilter {
    protected function getVisitor(): NodeVisitorAbstract
    {
        // fix AST by your visitor.
        return new class extends NodeVisitorAbstract {
            //...
        }
    }
});

待办事项

  • [] 一次性修复