spaze/phpstan-disallowed-calls

GitHub: spaze/phpstan-disallowed-calls

PHP 静态分析扩展,用于检测并禁止代码中不允许的调用与用法。

Stars: 334 | Forks: 23

# PHPStan 不允许的调用 [PHPStan](https://github.com/phpstan/phpstan) 规则用于检测不允许的调用及其他问题,无需运行代码。 [![PHP Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/149d5bfe50110325.svg)](https://github.com/spaze/phpstan-disallowed-calls/actions?query=workflow%3A%22PHP+Tests%22) 有些函数、方法、常量、命名空间、属性、变量和属性在生产代码中不应使用。一个典型的例子是 `var_dump()` 函数, 它常用于快速调试问题,但在提交代码前应被移除。当然也有例外。 另一个例子是通用日志记录器。假设你使用了一个通用日志库,但你有自己的日志器 会在调用通用日志器之前添加更多信息或清洗数据。你的代码不应直接调用通用日志器 而应改用你自定义的日志器。 这个 [PHPStan](https://github.com/phpstan/phpstan) 扩展会在配置后检测此类用法。需要说明的是, 该扩展并非用于防御或检测恶意开发者,因为他们可以混淆调用等方式绕过。此扩展旨在 作为另一双眼睛,检测你自己的编码错误,其目标并非检测所有问题。 [Test](tests) 将提供示例说明当前 ***检测到*** 哪些问题。如果未被测试覆盖,可能检测不到。 `*Test.php` 文件即为测试文件,优先查看这些文件,分析后的代码位于 [src](tests/src),所需测试类位于 [libs](tests/libs)。 欢迎提交 [issues](https://github.com/spaze/phpstan-disallowed-calls/issues) 或创建 [pull requests](https://github.com/spaze/phpstan-disallowed-calls/pulls) 以支持更多调用检测。 ## 安装 使用 [Composer](https://getcomposer.org/) 安装扩展: ``` composer require --dev spaze/phpstan-disallowed-calls ``` [PHPStan](https://github.com/phpstan/phpstan),PHP 静态分析工具,是必需依赖。 如果使用 [phpstan/extension-installer](https://github.com/phpstan/extension-installer),配置已完成,可跳过后续步骤。 手动安装时,请在 `phpstan.neon` 中添加以下内容: ``` includes: - vendor/spaze/phpstan-disallowed-calls/extension.neon ``` ## 配置文件 你可以从 [捆绑配置文件](docs/configuration-bundled.md) 开始使用。 ## 自定义规则 该扩展支持灵活的 [自定义规则](docs/custom-rules.md)。 ### 允许部分先前被禁止的调用或用法 假设你已禁止使用 `foo()` 函数(或其它支持的项目,如常量或方法调用等)。但你希望在自定义包装器中使用时重新允许, 或者当第一个参数等于或不等于指定值时允许。该扩展提供多种方式实现: - [忽略错误](docs/allow-ignore-errors.md)(PHPStan 方式) - [允许在路径中](docs/allow-in-paths.md) - [允许在方法或函数中](docs/allow-in-methods.md) - [允许带指定参数](docs/allow-with-parameters.md) - [允许带指定标志](docs/allow-with-flags.md) - [允许在类、子类或实现接口的类中](docs/allow-in-instance-of.md)(等同于 `instanceof` 运算符) - [允许在具有指定属性的类中](docs/allow-in-class-with-attributes.md) - [允许在具有指定属性的方法或函数中](docs/allow-in-methods.md) - [允许在任意方法具有指定属性的类中](docs/allow-in-class-with-method-attributes.md) - [允许在类型提示位置](docs/allow-in-type-hint-positions.md)(参数类型、返回类型 - 仅 `disallowedNamespaces` 和 `disallowedClasses`) [重新允许属性](docs/allow-attributes.md) 使用类似的 [配置](docs/allow-attributes.md)。 ## 禁用函数与类的检测 使用 [提供的生成器](docs/disallow-disabled-functions-classes.md) 从 PHP 的 `disable_functions` 与 `disable_classes` 配置指令生成配置片段。 ## 示例输出 ``` ------ -------------------------------------------------------- Line libraries/Report/Processor/CertificateTransparency.php ------ -------------------------------------------------------- 116 Calling var_dump() is forbidden, use logger instead ------ -------------------------------------------------------- ``` ## 大小写敏感性 函数名、方法名、类名、命名空间不区分大小写(禁用 `print_r` 也会匹配 `print_R` 调用),而常量、文件名、路径等区分大小写。 ## 仅此规则 你也可以仅使用此扩展 [不启用其它 PHPStan 规则](docs/phpstan-custom-ruleset.md)。这在需要检查第三方代码中某些调用或用法时可能很有用。 ## 运行测试 如果你想贡献(很棒,谢谢!),应添加并运行测试。 首先运行 `composer install` 安装开发依赖,然后使用 `composer test` 运行 PHPUnit 测试,具体命令在 `composer.json` 的 `scripts` 中定义。测试也会在 GitHub Actions 中每次推送时自动运行。 可通过运行 `composer cs-fix` 自动修复代码风格问题。 ## 相关项目 有一个配置略有不同的类似项目,几乎同时创建(仅相差几天):[PHPStan Banned Code](https://github.com/ekino/phpstan-banned-code)。 ## 框架或包特定配置 - [Nette 框架](https://github.com/spaze/phpstan-disallowed-calls-nette) - [Symfony](https://github.com/spaze/phpstan-disallowed-calls-symfony)
标签:Composer, Composer扩展, ffuf, PHPStan, PHP代码规范, SEO关键词:PHPStan规则, SOC Prime, 云安全监控, 云计算, 代码检测, 关键字检测, 函数调用检测, 命名空间检测, 属性检测, 常量检测, 开发工具, 技术栈:PHP, 方法调用检测, 日志调用限制, 生产环境代码规范, 白名单机制, 禁止调用, 自定义日志, 规则引擎, 调试函数移除, 超全局变量检测, 防御性编程, 静态分析, 静态分析规则