Slamdunk/phpstan-extensions
GitHub: Slamdunk/phpstan-extensions
PHPStan 扩展,提供一系列静态规则提升代码质量与安全规范性。
Stars: 70 | Forks: 13
# Slam PHPStan 扩展
[](https://packagist.org/packages/slam/phpstan-extensions)
[](https://packagist.org/packages/slam/phpstan-extensions)
[](https://github.com/Slamdunk/phpstan-extensions/actions)
[](https://codecov.io/gh/Slamdunk/phpstan-extensions)
[PHPStan](https://phpstan.org/) 的扩展
## 安装
要使用此扩展,请在 [Composer](https://getcomposer.org/) 中引入它:
```
composer require --dev slam/phpstan-extensions
```
## 用法
当您使用 [`phpstan/extension-installer`](https://github.com/phpstan/extension-installer) 时,
`conf/slam-rules.neon` 将被自动包含。
否则,您需要在 `phpstan.neon` 中包含 `conf/slam-rules.neon`:
```
includes:
- vendor/slam/phpstan-extensions/conf/slam-rules.neon
```
## 规则
1. `SlamPhpStan\UnusedVariableRule`:检查函数内从未在初始赋值后使用的变量
2. `SlamPhpStan\MissingClosureParameterTypehintRule`:要求闭包参数使用类型提示;警告:不允许使用 PhpDoc,请参考 [`phpstan/phpstan-strict-rules#87`](https://github.com/phpstan/phpstan-strict-rules/issues/87)
3. `SlamPhpStan\StringToClassRule`:要求引用类的字符串使用 `::class` 表示法
4. `SlamPhpStan\GotoRule`:禁止使用 goto
5. `SlamPhpStan\ClassNotationRule`:
1. 接口必须以 "Interface" 结尾
2. Trait 必须以 "Trait" 结尾
3. 抽象类必须以 "Abstract" 开头
4. 异常类必须以 "Exception" 结尾
6. `SlamPhpStan\PhpUnitFqcnAnnotationRule`:以下 PHPUnit 注解中必须存在的类:
1. `@expectedException`
2. `@covers`
3. `@coversDefaultClass`
4. `@uses`
7. `SlamPhpStan\AccessGlobalVariableWithinContextRule`:禁止在扩展或实现某个类/接口的类中访问全局变量
8. `SlamPhpStan\AccessStaticPropertyWithinModelContextRule`:禁止在扩展或实现某个类/接口的类中访问静态属性,用于禁止在模型中使用单例模式
## 非即时配置
存在一个 `not-now-rules.neon` 配置文件,用于禁止原始日期系统调用:
```
includes:
- vendor/slam/phpstan-extensions/conf/not-now-rules.neon
```
这些规则禁止:
1. `new DateTimeImmutable()`
2. `new DateTime('yesterday')`
3. `date('Y-m-d')`
4. `time()`、`microtime()`
5. `strtotime('noon')`
您应该改用时钟抽象,例如 [`lcobucci/clock`](https://github.com/lcobucci/clock)。
警告:这些规则并不完善,用户可以轻易绕过它们;它们仅用于帮助过渡到合适的时钟抽象。
## Symfony 特定配置
存在一个 `symfony-rules.neon` 配置文件,用于 Symfony 项目:
```
includes:
- vendor/slam/phpstan-extensions/conf/symfony-rules.neon
```
配置如下:
1. `SlamPhpStan\SymfonyFilesystemRule`:禁止调用未由
[`symfony/filesystem`](https://github.com/symfony/filesystem) 组件封装的原始文件系统函数
2. `SlamPhpStan\SymfonyProcessRule`:禁止调用未由
[`symfony/process`](https://github.com/symfony/process) 组件封装的原始系统函数
## Yii 特定配置
存在一个 `yii-rules.neon` 配置文件,用于 Yii 项目:
```
includes:
- vendor/slam/phpstan-extensions/conf/yii-rules.neon
```
配置如下:
1. `SlamPhpStan\AccessGlobalVariableWithinContextRule`:禁止在实现 `yii\db\ActiveRecordInterface` 的模型中使用 `$_GET`、`$_POST` 等全局变量;在模型中使用单例被视为反模式
2. `SlamPhpStan\AccessStaticPropertyWithinModelContextRule`:禁止在实现 `yii\db\ActiveRecordInterface` 的模型中使用 `yii\BaseYii` 静态变量(如 `$app`);在模型中使用单例被视为反模式
标签:Composer, ffuf, Goto, OpenVAS, PHP, PHPStan, PHPUnit注解, SEO, SOC Prime, Trait命名, 云安全监控, 全限定类名, 安全专业人员, 开发工具, 异常命名, 扩展, 抽象类命名, 接口命名, 未使用变量, 类引用, 规则, 闭包类型提示, 静态分析