phpcompatibility是专用于php代码兼容性检测的phpcs规则集,通过静态分析精准识别match、str_contains()等高版本语法在目标环境中的不兼容问题,需配合--runtime-set testversion显式指定检测版本,而非composer运行时校验。

Composer 本身不提供 Incompatibility 库,也不存在叫这个名字的官方或主流 PHP 兼容性检测工具——这是个常见误解。你真正需要的是 phpcompatibility/php-compatibility 配合 phpcs 做静态扫描。
为什么找不到 “Incompatibility” 库
搜索 packagist.org 或运行 composer search incompatibility 会返回零结果。PHP 生态中没有名为 Incompatibility 的兼容性检查库。这个名称可能是对 php-compatibility 规则集的误记、翻译偏差,或是混淆了其他语言(如 Python 的 incompatibility 工具)。
- 真实可用的方案是
phpcompatibility/php-compatibility:它是一套 PHPCS 规则,专用于标记高版本 PHP 语法/函数在目标低版本环境中的不兼容点 - 它不依赖 Composer 运行时环境校验,而是做源码级静态分析——这正是你“检测功能点”所需的底层能力
- 别试图
composer require incompatibility/incompatibility,那只会报Package not found
如何用 phpcompatibility/php-compatibility 检测具体功能点
它能精准定位到代码里用了哪些仅在特定 PHP 版本后才支持的语法或函数,比如 match 表达式、str_contains()、??=、联合类型等。
- 安装命令:
composer require --dev phpcompatibility/php-compatibility squizlabs/php_codesniffer - 手动扫描指定版本(例如检查是否兼容 PHP 7.4):
vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion 7.4 src/ - 输出示例:
FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES,其中警告会明确指出哪一行用了str_contains()(PHP 8.1+)或new Foo() instanceof Bar(PHP 8.0+) -
--runtime-set testVersion必须显式指定,否则默认只检查 PHP 5.6 兼容性,对现代项目基本无效
怎样让检测自动运行且不被绕过
靠人每次手动敲命令容易漏,必须嵌入开发流程。最可靠的方式是绑定到 composer scripts 并接入 CI。
- 在
composer.json的scripts段加一条:"compat-check": "phpcs --standard=PHPCompatibility --runtime-set testVersion 7.4 src/" - 本地开发时执行:
composer compat-check - CI 中(如 GitHub Actions)加入步骤:
composer compat-check,失败即中断构建 - 注意:不要把
--ignore-platform-reqs或--no-scripts加进 CI 的composer install,否则compat-check脚本根本不会装、更不会跑
它和 Composer 的 require.php 约束根本不是一回事
composer.json 里的 "php": "^8.1" 只控制“能不能装”,而 phpcompatibility 控制“装完能不能跑”。两者必须配合使用,缺一不可。
- 现象:
composer install成功,但部署到 PHP 7.4 服务器后直接ParseError: syntax error, unexpected token "match" - 原因:Composer 只看了
require.php是否满足本地 CLI 版本,完全不管你的源码里有没有写 PHP 8.0+ 语法 - 关键区别:
require.php是声明式约束,phpcompatibility是扫描式检测;前者管依赖选择,后者管代码存活 - 最容易被忽略的一点:即使你锁死了所有包版本,只要自己写了新代码用了高版本语法,依然会崩——这点
phpcompatibility能抓到,Composer 永远抓不到
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











