stevebauman/unfinalize
GitHub: stevebauman/unfinalize
Unfinalize 是一个 PHP 开发工具,用于自动移除 Composer 依赖包中类和方法的 final 关键字,以便开发者通过继承扩展第三方包。
Stars: 145 | Forks: 5
Unfinalize
释放因开源 PHP 包将类和方法标记为 final 而失去的自由。
Unfinalize 使用 [PHP CS Fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer) 来永久移除 composer vendor 包中的 `final` 关键字:
```
- final class Foo
+ class Foo
{
- final public function bar()
+ public function bar()
{
// ...
}
}
```
- 对 PHP 文件的更新安全、快速且高性能。
- 更改将被永久存储。使用 Unfinalize 不会产生任何性能影响。
- 对您的应用程序没有额外的依赖。Unfinalize 及其依赖项被[编译成一个单独的 phar 文件](https://github.com/stevebauman/unfinalize/blob/master/builds)。
## 安装
```
composer require stevebauman/unfinalize
```
## 用法
您可以使用两种不同的方法来 unfinalize 文件:[文件路径](#file-paths) 或 [包路径](#package-paths)。
### 文件路径
使用文件路径允许您通过在命令中指定来 unfinalize 特定的文件或目录:
```
php vendor/bin/unfinalize run vendor/package/src/File.php
```
您可以通过用空格分隔来 unfinalize 多个文件或目录:
```
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` 文件中指定来 unfinalize 整个包。
在 `unfinalize` 属性中添加您想要移除 final 关键字的 vendor 包:
```
{
"unfinalize": [
"vendor/package"
]
}
```
将 unfinalize 命令添加到您的 `composer.json` 中,以便它在 `composer update` 时运行:
```
{
"scripts": {
"post-update-cmd": [
"@php vendor/bin/unfinalize run"
]
}
}
```
然后,运行 `composer update`。
### 选项
#### `--annotate={annotation}`
如果您希望在 unfinalize 后,使用注解 (`@{annotation}`) 文档块来标记 final 类和方法,
您可以将 `--annotate` 选项添加到 unfinalize 命令中:
```
{
"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={protected/public}`
如果您希望将 `private` 属性的可见性更改为
`protected` 或 `public`,您可以将 `--properties` 选项添加到
unfinalize 命令中,并指定要分配的新可见性:
```
{
"scripts": {
"post-update-cmd": [
"@php vendor/bin/unfinalize run --properties=protected"
]
}
}
```
这将产生:
**之前**:
```
class Foo
{
private $bar;
}
```
**之后**:
```
class Foo
{
protected $bar;
}
```
#### `--methods={protected/public}`
如果您希望将 `private` 方法的可见性更改为
`protected` 或 `public`,您可以将 `--methods` 选项添加到
unfinalize 命令中,并指定要分配的新可见性:
```
{
"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
```
标签:Composer, ffuf, OpenVAS, PHP, PHP CS Fixer, SOC Prime, 代码重构, 依赖管理, 开发工具