Slamdunk/phpstan-extensions

GitHub: Slamdunk/phpstan-extensions

PHPStan 扩展,提供一系列静态规则提升代码质量与安全规范性。

Stars: 70 | Forks: 13

# Slam PHPStan 扩展 [![最新稳定版本](https://img.shields.io/packagist/v/slam/phpstan-extensions.svg)](https://packagist.org/packages/slam/phpstan-extensions) [![下载量](https://img.shields.io/packagist/dt/slam/phpstan-extensions.svg)](https://packagist.org/packages/slam/phpstan-extensions) [![集成](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3483f24e0d211454.svg)](https://github.com/Slamdunk/phpstan-extensions/actions) [![代码覆盖率](https://codecov.io/gh/Slamdunk/phpstan-extensions/coverage.svg)](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命名, 云安全监控, 全限定类名, 安全专业人员, 开发工具, 异常命名, 扩展, 抽象类命名, 接口命名, 未使用变量, 类引用, 规则, 闭包类型提示, 静态分析