icewind / patcher
Replace build in php functions
v0.4.0
2015-10-24 12:54 UTC
Requires
- icewind/interceptor: 0.3.0
Requires (Dev)
- phpunit/phpunit: 4.8.*
This package is auto-updated.
Last update: 2024-10-18 18:27:14 UTC
README
Replace build in php functions
composer require icewind/patcher
Usage
Overwriting a method
use Icewind\Patcher\Patcher; $patcher = new Patcher(); $patcher->patchMethod('time', function () { return 100; }); $patcher->whiteListDirectory(__DIR__ . '/src'); $patcher->autoPatch(); include 'src/....';
Using the original method
use Icewind\Patcher\Patcher; $patcher = new Patcher(); $patcher->patchMethod('time', function ($method, $arguments, $original) { $time = $original(); error_log("Time: $time"); return $time; }); $patcher->whiteListDirectory(__DIR__ . '/src'); $patcher->autoPatch(); include 'src/....';
Overwriting a class
use Icewind\Patcher\Patcher; class DummyDateTime extends DateTime { public function __construct() { parent::__construct("1970-01-01 00:00:00 UTC"); } } $patcher = new Patcher(); $patcher->patchClass('\DateTime', '\DummyDateTime'); $patcher->whiteListDirectory(__DIR__ . '/src'); $patcher->autoPatch(); include 'src/....';
API
patchMethod(string $method, callable $handler)
: Set the handler for a method- The handler will be called with the following three arguments
string $method
the name of the method being calledarray $arguments
the arguments the method was called withcallable $original
a closure which will call the overwriten method with the correct arguments and return the resultpatchClass(string $method, string $replacement)
: Overwrite a class with a different one- Note, at the moment this only works with classes in the global namespace
whiteListDirectory(string $path)
: Add a directory to the white list for the auto patcherblackListDirectory(string $path)
: Add a directory to the black list for the auto patcherautoPatch()
: Enable auto patching for all files included from this point- Automatically apply the patch methods for any namespace defined
- Will only be applied for files within a whitelisted directory