Laravel Packages

Remove "final" keywords from classes and methods in vendor packages with Unfinalize

Published Updated
Remove "final" keywords from classes and methods in vendor packages with Unfinalize image

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 L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Run Large PlanetScale Queries in Laravel With DB::olap() image

Run Large PlanetScale Queries in Laravel With DB::olap()

Read article
Fluent Rule Builders for All Laravel Validation Rules image

Fluent Rule Builders for All Laravel Validation Rules

Read article
Laravel URL AI Transformer: Extract Structured Data From URLs image

Laravel URL AI Transformer: Extract Structured Data From URLs

Read article
Rule Builders for Every Validation Rule in Laravel 13.36 image

Rule Builders for Every Validation Rule in Laravel 13.36

Read article
PHP News: A New Site for PHP Releases, RFCs, and Packages image

PHP News: A New Site for PHP Releases, RFCs, and Packages

Read article
Pause Polling in Background Tabs in Inertia.js v3.9 image

Pause Polling in Background Tabs in Inertia.js v3.9

Read article