Unleash the freedom lost with open source PHP packages marking classes and methods as final.
Unfinalize uses PHP CS Fixer to permanently remove final keywords from composer vendor packages:
- final class Foo
+ class Foo
{
- final public function bar()
+ public function bar()
{
// ...
}
}- 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.
composer require stevebauman/unfinalizeInside your composer.json file, add the vendor packages you want to remove the final keywords from inside:
{
"unfinalize": [
"vendor/package"
]
}Add the unfinalize command to your composer.json so it runs on composer update:
{
"scripts": {
"post-update-cmd": [
"@php vendor/bin/unfinalize run"
]
}
}Then, run composer update.
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()
{
// ...
}
}Execute a dry run to see what files will be modified by PHP CS Fixer.