PHP code example of m3m0r7 / method-injector
1. Go to this page and download the library: Download m3m0r7/method-injector library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
m3m0r7 / method-injector example snippets
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->replaceFunction(
'date',
function (...$args) {
return '2012-01-01';
}
);
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$inspector = function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->replaceFunction(
'date',
function (...$args) {
return '2012-01-01';
}
);
}
);
};
$test
->inspect(
Foo::class,
$inspector
)
->inspect(
Bar::class,
$inspector
)
->patch();
$fooMock = $test->createMock(Foo::class);
$barMock = $test->createMock(Bar::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'test',
function (Condition $condition) {
return $condition
->replaceFunction(
'date',
function (...$args) {
return '2012-01-01';
}
);
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->replaceField('testField', 'changed default value');
}
)
->patch();
$mock = $test->createMock(Test::class);
echo $mock->testField;
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->replaceConstant('TEST', 'changed default value');
}
)
->patch();
$mock = $test->createMock(Test::class);
echo $mock::TEST;
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->before(function () {
echo "Hello HEAD!\n";
});
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->after(function () {
echo "Finish to run.\n";
});
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->replaceInstance(
Foo::class,
Bar::class
);
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->replaceStaticCall(
Foo::class,
Bar::class
);
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->replaceMethod(
'testMethod',
function () {
return 'Fixed value.';
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory([
'replacer' => [
[Inspector::FUNCTION, MyFunctionReplacer::class],
[Inspector::CLASS_CONSTANT, MyConstantReplacer::class],
],
]);
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->replaceMethod(
'testMethod',
function () {
return 'Fixed value.';
}
);
}
)
->patch();
$mock = $test->createMock(Test::class);
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->addReplacer(Inspector::FUNCTION, MyFunctionReplacer::class)
->addReplacer(Inspector::CLASS_CONSTANT, MyConstantReplacer::class);
}
)
->patch();
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory([
'inspectorClass' => MyInspector::class,
]);
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->addReplacer(Inspector::FUNCTION, MyFunctionReplacer::class)
->addReplacer(Inspector::CLASS_CONSTANT, MyConstantReplacer::class);
}
)
->patch();
MethodInjector\Condition;
use MethodInjector\Inspector;
use MethodInjector\MethodInjector;
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->enableParentMock(true)
->enableTraitsMock(true);
}
)
->patch();
use MethodInjector\Builder\ConditionBuilder;
$builder = ConditionBuilder::factory(Test::class)
->replaceFunction(
'date',
function (...$args) {
return '9999-99-99';
}
)
->make()
->patch();
$test = \MethodInjector\MethodInjector::factory();
$test
->inspect(
Test::class,
function (Inspector $inspector) {
return $inspector
->methodGroup(
'*',
function (Condition $condition) {
return $condition
->replaceFunction(
'date',
function (...$args) {
return '9999-99-99';
}
);
}
)
->enableParentMock(true)
->enableTraitsMock(true);
}
)
->patch();
use MethodInjector\Builder\ConditionBuilder;
$builder = ConditionBuilder::factory(Test::class)
->group('doSomething')
->replaceFunction(
'date',
function (...$args) {
return '9999-99-99';
}
)
->make()
->patch();
use MethodInjector\Builder\ConditionBuilder;
$builder = ConditionBuilder::factory(Test::class)
->group('doSomething1')
->replaceFunction(
'date',
function (...$args) {
return '9999-99-99';
}
)
->group('doSomething2')
->replaceFunction(
'date',
function (...$args) {
return '0000-00-00';
}
)
->make()
->patch();