Unfinalize by Steve Bauman just released v1, and those release notes are worth a minute of your time.
Unfinalize is a package that uses PHP CS Fixer to permanently remove final
keywords from composer vendor packages.
Please Note: you'll need to fork this package if you want to use it as the PHP CS Fixer team has marked the original package as a conflict. You can get around this by forking this package with a new name.
- final class Foo
+ class Foo
{
- final public function bar()
+ public function bar()
{
// ...
}
}
When you run it, it does the following:
- Updates to PHP files are done safely, quickly, and performant.
- Changes are stored permanently. There is no performance impact using Unfinalize.
- No additional dependencies to your application. Unfinalize and its dependencies are compiled into a single phar file.
Unfinalize Usage
Install it first:
composer require stevebauman/unfinalize
Then, inside your composer.json
file, add the vendor packages you want to remove the final keywords from inside:
{
"unfinalize": [
"vendor/package"
]
}
Next, add the unfinalize command to your composer.json
so it runs on composer update
:
{
"scripts": {
"post-update-cmd": [
"@php vendor/bin/unfinalize run"
]
}
}
Finally, run composer update
.
Unfinalize Options
--mark-final
If you would like final classes and methods to be marked with a @final
doc block, you may add the --mark-final
option to the unfinalize command:
{
"scripts": {
"post-update-cmd": [
"@php vendor/bin/unfinalize run --mark-final"
]
}
}
Which will produce:
Before:
final class Foo
{
final public function bar()
{
// ...
}
}
After:
/**
* @final
*/
class Foo
{
/**
* @final
*/
public function bar()
{
// ...
}
}
--dry
Execute a dry run to see what files will be modified by PHP CS Fixer.