stevebauman/unfinalize

永久从供应商包中删除final关键字。

v2.1.0 2023-12-26 12:35 UTC

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属性的可见性更改为protectedpublic,则可以在unfinalize命令中添加--properties选项,并用新的可见性分配给它。

{
  "scripts": {
    "post-update-cmd": [
      "@php vendor/bin/unfinalize run --properties=protected"
    ]
  }
}

这将产生

之前:

class Foo
{
    private $bar;
}

之后:

class Foo
{
    protected $bar;
}

--methods={受保护的/公共的}

如果您想将private方法的可见性更改为protectedpublic,则可以在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