Remove "final" keywords from classes and methods in vendor packages with Unfinalize
Last updated on by Eric L. Barnes
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.
Eric is the creator of Laravel News and has been covering Laravel since 2012.