dg / bypass-finals
Removes final keyword from source code on-the-fly and allows mocking of final methods and classes
Installs: 15 612 061
Dependents: 350
Suggesters: 1
Security: 0
Stars: 489
Watchers: 13
Forks: 30
Open Issues: 5
Requires
- php: >=7.1
Requires (Dev)
- nette/tester: ^2.3
- phpstan/phpstan: ^0.12
README
Introduction
BypassFinals effortlessly strips away final
and readonly
keywords from your PHP code on-the-fly.
This handy tool makes it possible to mock final methods and classes, seamlessly integrating with popular
testing frameworks like PHPUnit, Mockery, or Nette Tester.
Installation
The easiest way to install BypassFinals is via Composer. Just run the following command in your project directory:
composer require dg/bypass-finals --dev
It pretty much runs everywhere: PHP 7.1 through 8.3 are all supported!
Usage
To get BypassFinals up and running, just invoke:
DG\BypassFinals::enable();
Make sure to call this method early, preferably immediately after your vendor/autoload.php
is loaded,
to ensure all classes are processed before they are used.
Note that final internal PHP classes like Closure
are not mockable.
To avoid removing readonly
keywords, you can disable this feature by passing a parameter:
DG\BypassFinals::enable(bypassReadOnly: false);
To narrow down the application scope of BypassFinals, use a whitelist to specify directories or files:
DG\BypassFinals::allowPaths([ '*/Nette/*', ]);
Or, conversely, you can specify which paths not to search using DG\BypassFinals::denyPaths()
.
This gives you finer control and can solve issues with certain frameworks and libraries.
Enhance performance by caching transformed files. Make sure the cache directory already exists:
DG\BypassFinals::setCacheDirectory(__DIR__ . '/cache');
For integration with PHPUnit 10 or newer, simply add BypassFinals as an extension in your PHPUnit XML configuration file:
<extensions> <bootstrap class="DG\BypassFinals\PHPUnitExtension"/> </extensions>
Do you like this project?
Check out my other innovative open-source projects that might catch your interest:
✅ Latte: The only safe and intuitive templating system for PHP
✅ Tracy: An addictive debugging tool to enhance your development workflow
✅ PhpGenerator: A robust library for generating PHP code with modern features
✅ Nette Framework: A thoughtfully engineered and popular web framework.