stevebauman / unfinalize
永久从供应商包中删除final关键字。
Requires
- php: ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.16
- laravel-zero/framework: ^10.0.2
- laravel/pint: ^1.8
- mockery/mockery: ^1.5.1
- nunomaduro/termwind: ^1.15.1
- pestphp/pest: ^2.5
- spatie/ray: ^1.39
This package is auto-updated.
Last update: 2024-09-04 19:23:17 UTC
README
释放开源PHP包中标记类和方法为final
所失去的自由。
Unfinalize使用PHP CS Fixer永久地从composer供应商包中移除final
关键字。
- final class Foo + class Foo { - final public function bar() + public function bar() { // ... } }
- 对PHP文件进行更新是安全、快速且高效的。
- 更改将永久存储。使用Unfinalize不会影响性能。
- 无需为您的应用程序添加其他依赖。Unfinalize及其依赖都编译到一个单独的phar文件中。
安装
composer require stevebauman/unfinalize
用法
您可以使用两种不同的方法来解final化文件:通过指定命令中的文件路径,或通过指定包路径。
文件路径
使用文件路径允许您通过在命令中指定它们来解final化特定的文件或目录。
php vendor/bin/unfinalize run vendor/package/src/File.php
您可以通过空格分隔来解final化多个文件或目录。
php vendor/bin/unfinalize run vendor/package/src/Foo/ vendor/package/src/Bar/File.php
要确保始终在您项目依赖项上执行此操作,请将命令添加到您的composer.json
文件中的scripts
属性。
{ "scripts": { "post-update-cmd": [ "@php vendor/bin/unfinalize run vendor/package/src/Foo/ vendor/package/src/Bar/File.php" ] } }
然后运行composer update
。
包路径
使用包路径允许您通过在您的composer.json
文件中指定它们来解final化整个包。
在unfinalize
属性内部添加您想从其中删除final关键字的供应商包。
{ "unfinalize": [ "vendor/package" ] }
将unfinalize命令添加到您的composer.json
中,以便在运行composer update
时执行。
{ "scripts": { "post-update-cmd": [ "@php vendor/bin/unfinalize run" ] } }
然后,运行composer update
。
选项
--annotate={注释}
如果您希望在解final化后使用注释(@{注释}
)doc块标记final类和方法,则可以在unfinalize命令中添加--annotate
选项。
如果doc块中已经存在注释,则将保持不变。
{ "scripts": { "post-update-cmd": [ "@php vendor/bin/unfinalize run --annotate=internal" ] } }
这将产生
之前:
final class Foo { final public function bar() { // ... } }
之后:
/** * @internal */ class Foo { /** * @internal */ public function bar() { // ... } }
--properties={受保护的/公共的}
如果您想将private
属性的可见性更改为protected
或public
,则可以在unfinalize命令中添加--properties
选项,并用新的可见性分配给它。
{ "scripts": { "post-update-cmd": [ "@php vendor/bin/unfinalize run --properties=protected" ] } }
这将产生
之前:
class Foo { private $bar; }
之后:
class Foo { protected $bar; }
--methods={受保护的/公共的}
如果您想将private
方法的可见性更改为protected
或public
,则可以在unfinalize命令中添加--methods
选项,并用新的可见性分配给它。
{ "scripts": { "post-update-cmd": [ "@php vendor/bin/unfinalize run --methods=public" ] } }
这将产生
之前:
class Foo { private function bar() { } }
之后:
class Foo { public function bar() { } }
--dry
执行dry run以查看Unfinalize将修改哪些文件
vendor/bin/unfinalize run --dry