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.