nazonohito51 / monkey-patch
PHP的Monkey patch。
0.1.0
2019-07-22 17:09 UTC
Requires
- nikic/php-parser: ^4.0
Requires (Dev)
- nazonohito51/dependency-analyzer: ^0.2.2
- phpunit/phpunit: ~8
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 { //... } } });
待办事项
- [] 一次性修复